首先,让我先说我是C#初学者。我的背景主要是数据库。我正在开发一个项目,经常调用C#服务器,然后调用各种存储过程(大约20个左右)从SQL Server DB中检索数据。现在,C#服务器已设置为进行同步调用。虽然SP调用快速而小巧,但我们仍然希望实现一个线程池来处理大量用户和同时请求。
我的问题:
如何实现线程池?最有可能的是,线程池将从500左右开始,但可能会根据应用程序的使用而增长。
如何将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;
}
答案 0 :(得分:0)
如评论中所述,您应该使用.NET ThreadPool而不是实现自己的。更好的是,使用较新的.NET Parallel library并将其中的每一个组合成一个任务。通过相对较少的代码,您可以更好地控制并发处理的方式。
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();
}