我有一个300,000 +项目的列表。 我目前对列表做的事情是验证地址并将原始地址和更正后的地址写入指定的文件。 我想要做的是平均分配给定数量的线程之间的列表并同时做他们的进程。 任何人都可以帮助我举一个例子,说明我可以如何去做这样的事情?多线程处理列表数据
感谢
我有一个300,000 +项目的列表。 我目前对列表做的事情是验证地址并将原始地址和更正后的地址写入指定的文件。 我想要做的是平均分配给定数量的线程之间的列表并同时做他们的进程。 任何人都可以帮助我举一个例子,说明我可以如何去做这样的事情?多线程处理列表数据
感谢
如果你在2.0工作,名单只在只读方式(尽管这种处理是发生未改变)被使用,那么你可以简单地划分指标。例如...
public void Process(List<Item> list, int threadCount) {
int perThread = list.Count < threadCount ? list.Count : list.Count/threadCount;
int index = 0;
while (index < list.Count) {
int start = index;
int count = Math.Min(perThread,list.Count-start);
WaitCallBack del = delegate(object state) { ProcessCore(list, start, count); };
ThreadPool.QueueUserWorkItem(del);
index += count;
}
}
private void ProcessCore(List<Item> list, int startIndex, int count) {
// Do work here
}
如果只有一个输出文件,则需要包含文件锁定(我可能会将一个StreamWriter传递给线程函数,尽管可能有更好的方法)。 – 2009-11-05 16:50:50
从概念上讲,这是相当简单的,有几假设:
基本上,你的算法是这样的:
是否只有一个输出文件? – 2009-11-05 16:48:09
是的,会有一个最终的输出文件。 – AlteredConcept 2009-11-05 22:30:58