我长时间调用通过ThreadPool.QueueUserWorkItem调用的ASP.NET应用程序中的Web服务。该呼叫大约需要2分钟才能完成,并将大约2000条记录发送到外部数据存储。一切似乎都在顺利运行,除了我注意到当在运行IIS7的生产环境中进行这些调用时,只使用了1个CPU内核,并且它已经达到最大值。如何在所有可用CPU核心之间平衡工作负载?
答案 0 :(得分:4)
假设您使用的是.Net 4.0 +
如果你有2000条记录并且需要对某种服务进行2000次相关调用,你可以使用这种方法:
List<RecordType> records = GetMyRecords();
Parallel.ForEach(records, record => {
MakeMyServiceCall(record);
});
这将并行地为每个单独的记录运行MakeMyServiceCall方法;并行库使用幕后的ThreadPool线程,这些线程将透明地分配可用内核上的负载。