3

首先,让我先说我是 C# 初学者。我的背景主要是数据库。我正在开发一个项目,其中将频繁调用 C# 服务器,然后调用各种存储过程(大约 20 个左右)以从 SQL Server DB 检索数据。现在,C# 服务器已设置为进行同步调用。虽然 SP 调用又快又小,但我们仍然希望实现一个线程池来处理大量用户和同时请求。

我的问题:

  1. 如何实现线程池?最有可能的是,线程池将在 500 左右开始,但可能会根据应用程序的使用而增长。

  2. 如何将 SP 调用添加到线程池。现在我的 SP 调用如下所示:

    int SPCall(string param1, string param2)
    {
      string MyConnString = "...";
      SqlConnection MyConn = new SqlConnection(MyConnString);
      MyConn.Open();
      SqlCommand SPCommand = new SqlCommand("wh_SP");
      SPCommand.Connection = MyConn;
      SPCommand.Parameters.Add(...) = param1;  
      SPCommand.Parameters.Add(...) = param2;  
    
      SPCommand.CommandType = System.Data.CommandType.StoredProcedure;
      SPCommand.ExecuteNonQuery();
      int outPut = (int)SPCommand.Parameters["@OUTPUT"].Value;
      return outPut;
     } 
    
4

1 回答 1

0

如评论中所述,您应该使用 .NET ThreadPool 而不是实现自己的。更好的是,使用较新的.NET Parallel 库并将它们中的每一个分块到一个任务中。您将使用相对较少的代码更好地控制并发处理方式。

public void PerformWork()
{
    // setup your inputs
    IEnumerable<string> inputs = CreateYourInputList();

    //  Method signature: Parallel.ForEach(IEnumerable<TSource> source, Action<TSource> body)
    Parallel.ForEach(inputs, input =>
        {
            // call your code that issues the stored procedure here
            this.SPCall(input);
        } //close lambda expression
    ); //close method invocation 

    // Keep the console window open in debug mode.
    Console.WriteLine("Processing complete. Press any key to exit.");
    Console.ReadKey();
}
于 2013-04-11T17:45:29.043 回答