【问题标题】:How to process bunch of records with multiple thread in c#?如何在 C# 中使用多线程处理一堆记录?
【发布时间】:2020-05-03 10:35:42
【问题描述】:

我有一个 SQL 数据库表,假设它包含 3000 条记录,现在我想用 3 个线程处理所有这些记录。像这样在第一个线程中处理 1000 条记录。 在 c# 多线程中怎么可能?

【问题讨论】:

  • SQL Server 是多线程的,因此只有在数据传输限制速度的情况下,创建额外的线程才会加快进程。加速应用程序的最佳方法是使用比 SQL 客户端类更快的实体。
  • @jdweng 使用比 SQL 客户端类更快的实体 任何来源?如果 Entity 建立在顶级 SQL 客户端类之上,如何更快?
  • 实体不是在 SQL 客户端上构建的。实体基于不同驱动程序的 db 上下文构建。
  • 那是什么处理?是CPU-bound or I/O bound吗?
  • 实体建立在 Microsoft.Data.SqlClient 之上...显然直接使用 Microsoft.Data.SqlClient 会更快

标签: c# multithreading


【解决方案1】:

最直接的方法是通过 fillingDataTable 检索所有行,然后将 DataTable 拆分为更小的数据子集,作为其他 DataTable 并将它们传递给每个线程。

把这个thread on how to split a DataTable里面的答案看成多个DataTables。

【讨论】:

    【解决方案2】:

    您可以创建任务,并且在每个任务中您可以处理一批行。

    var tasks = new List<Task>();
    for (var i = 0; i < 3; i++)
    {
        tasks.Add(new Task(() => doSomething(context.Subscriptors.Skip(i).Take(1000))));
    }
    
    Task.WhenAll(tasks);
    //continue execution
    

    【讨论】:

    • 非常感谢您提供这些信息。但我仍然很困惑,我如何在数据库中一次添加 3000 条记录时使用 3 个线程,我想为此使用 3 个线程。并且还想在线程中使用sql事务。请您为此分享更多信息。
    猜你喜欢
    • 1970-01-01
    • 2014-09-14
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    • 2020-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多