首页 > 解决方案 > 将大量工作分派给后台工作人员

问题描述

使用 C#。

我有 100,000 多条测试数据需要进行一些计算。我的实际数据集将在数百万条数据中。测试数据当前按顺序运行,处理时间约为一分钟。我想把这项工作分开,让后台工作人员处理背靠背,所以我希望能更快地完成处理。

我想到的是用数据做一个 foreach 循环,并用每条数据启动一个后台工作程序。我知道我需要将 bw 的数量限制为三个,因为我在这台机器上有 4 个内核。我用简单的 bw 做了一些测试,但不是同时用三个。

我不知道该怎么做。如何执行三个后台工作人员来处理这些数据?

标签: c#backgroundworker

解决方案


BackgroundWorker 主要用于早期学习工作。也许是奇怪的替代线程场景。你在做什么听起来像是一个非常先进的操作。您仍然可以使用 BGW,但此时原始线程、任务、线程池等会更好。

还有一个普遍的问题是这个操作是否可以用多线程加速。我喜欢说“多线程必须仔细挑选它的问题”。在错误的情况下选择它,你会得到一个需要更多内存的程序,更容易出错并且单个 BGW 或顺序程序慢。

您的案例可能是令人愉悦的并行操作的罕见案例之一。或者它可能主要受内存限制。这意味着您几乎会立即遇到并行减速。抵制硬编码线程数的尝试。通常,您可以将负载平衡工作留给 ThreadPool。要获得更好的答案,您需要获得更具体的答案。


推荐阅读