我需要处理 1600 万条数据库记录,这将花费我很长时间。我不精通线程所以想我会在这里问。我的想法是我需要执行以下操作,但不确定如何:
- 获取我的 1600 万条记录
- 将它们分成许多“块”
- 发送这些块中的每一个以在它们的线程上进行处理
这听起来对吗?我将如何分配我的工作量(16m 记录)等等......?
如果您能提供中肯的建议,请欢呼。
我需要处理 1600 万条数据库记录,这将花费我很长时间。我不精通线程所以想我会在这里问。我的想法是我需要执行以下操作,但不确定如何:
这听起来对吗?我将如何分配我的工作量(16m 记录)等等......?
如果您能提供中肯的建议,请欢呼。
如果您想并行处理一组项目,这正是Parallel.Foreach()
它的用途。您只需将要为每个项目执行的操作(可能作为 lambda)传递给它,它会负责将您的集合分成块并执行它。
但是你必须小心你在那个动作中投入了什么。这是因为代码将同时在更多线程上执行,因此您不应该以非线程安全的方式访问任何共享状态。
我建议您通过以下方式使用众所周知的生产者-消费者模式:
实现这一点的一个非常简单的方法是使用ThreadPool
类。它方便地为您管理队列和工作人员。您所需要的只是通过QueueUserWorkItem
.
或者,如果您想使用 TPL 构造,您可以自己使用Task
s 和a 的组合来实现上述机制ConcurrentQueue
。