【发布时间】:2010-05-05 18:26:56
【问题描述】:
我一直在讨论 .Net 4.0 中一些新的并行功能的实用性。
假设我有这样的代码:
foreach (var item in myEnumerable)
myDatabase.Insert(item.ConvertToDatabase());
想象一下 myDatabase.Insert 正在执行一些工作以插入 SQL 数据库。
理论上你可以这样写:
Parallel.ForEach(myEnumerable, item => myDatabase.Insert(item.ConvertToDatabase()));
您会自动获得利用多核的代码。
但是如果 myEnumerable 只能通过单个线程进行交互呢? Parallel类会不会单线程枚举,只在循环中将结果分派给工作线程?
如果 myDatabase 只能通过单个线程进行交互怎么办?每次循环迭代都建立一个数据库连接肯定不会更好。
最后,如果我的“var item”恰好是一个 UserControl 或者必须在 UI 线程上与之交互的东西怎么办?
我应该遵循什么设计模式来解决这些问题?
在我看来,在处理实际应用程序时,切换到 Parallel/PLinq/etc 并不容易。
【问题讨论】:
标签: c# .net multithreading parallel-processing