我正在遍历tblCustomer的数据,并检查地址是否有效。如果没有,那么我要将其添加到我的退货 list 中。问题是,有37000行要验证。验证是通过外部库完成的。大约需要1个小时。我想通过线程进行此操作,因此可以更快地进行。有人可以帮我重写吗?我也读过一些地方,将其包装在for或foreach的并行类中。我想知道的几件事-将创建多少个线程?我们该如何控制呢? 我们可以说每个线程将处理多少条记录吗? 和我认为最不重要的问题:此dll具有静态类,该类将验证地址。当我将其拆分为多个线程时,是否会给我带来任何性能提升?还是需要花费相同的时间? List<tblCustomer> customers = new List<tblCustomer>(); int i = 0; foreach (var customer in DataContext.tblCustomers) { string addressToValidate = string.Format("{0}, {1}; {2} {3}", GetSafeString(customer.MailingCity), GetSafeString(customer.MailingState), GetSafeString(customer.MailingAddress), GetSafeString(customer.MailingAddress2)); isTripValid = PCM.PCMSAddStop(tripId, addressToValidate.Trim()) == 1; if (!isTripValid) { customers.Add(customer); } i++; if (i == 1000) { PCM.PCMSClearStops(tripId); i = 0; } } PCM.PCMSCloseServer(serverID); PCM.PCMSDeleteTrip(tripId); return customers; 最佳答案 您可以使用ParallelOptions类的MaxDegreeOfParallelism属性来控制线程数。ParallelOptions.MaxDegreeOfParallelism = 5;//将并发线程限制为5个您可以使用ForEach()重载来控制分区,该重载将Partitioner 对象作为参数。 Here's a great article with an example on partitioning 它可能仍会改善您的性能,但是直到尝试之前,很难知道它的性能。 注意:如果您要开始使用多个线程,请确保所有共享对象/列表都是线程安全的。例如,您需要在客户列表周围加锁,或使用ConcurrentCollections namespace 中的集合。 PCM方法是线程安全的吗?
10-06 07:35