gpt4 book ai didi

c# - 为存储过程调用实现线程池

转载 作者:行者123 更新时间:2023-11-30 18:34:32 25 4
gpt4 key购买 nike

首先,让我先声明我是一名 C# 初学者。我的背景主要是数据库。我正在从事一个项目,该项目将频繁调用 C# 服务器,然后调用各种存储过程(大约 20 个左右)以从 SQL Server 数据库检索数据。现在,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;
    }

最佳答案

如评论中所述,您应该使用 .NET 线程池而不是实现自己的线程池。更好的是,使用更新的 .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();
}

关于c# - 为存储过程调用实现线程池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15954981/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com