我有一个应用程序,我正在努力,这是它目前的样子。 我想知道我是否能得到一些帮助使这更有效率。 正在寻找使用任务并行库(也就是说它会有所帮助)。 对现在的设计方式没有任何限制,这意味着我可以完全重新设计应用程序的任何部分。
class Program
{
static void Main(string[] args)
{
IList<ISystem> systems = GetSystems();
if (systems.Where(s => s.Import = true).Count() == 0)
return;
var export = new Export();
// Import & Export People
exportData.LoadPeople();
foreach(var system in systems)
foreach(var person in export.People)
system.Push(person);
export.LoadLocations();
foreach(var system in systems)
foreach(var location in export.Locations)
system.Push(location);
export.LoadOtherData();
foreach(var system in systems)
system = system as IDifferentSystem;
if (system == null) continue;
foreach(var data in export.OtherData)
system.Push(data);
}
}
感谢您的帮助
答案 0 :(得分:2)
这完全取决于“高效”的含义,以及您要解决的问题与维护多线程设计的成本。
对于一些非常一般的建议,有三种类型的问题需要多线程设计:
上面的内容有点过于简单,但重点是,确保您正在解决正确的问题,而不是将您的问题强制转换为先入为主的解决方案。决定使用多线程设计时需要考虑的因素很多。自动化测试将变得更加困难。您的设计是否可以正确执行(没有崩溃/挂起/数据损坏)以及您对特定应用程序的性能定义?当然,TPL使多线程设计更容易,但它绝对不会完全消除这些成本。
始终考虑替代方案。例如,上面的#1也可以使用异步的东西来完成,稍后可能会在你的调用线程上运行I / O回调(即使这是内部多线程的,但你不需要关心它)。这仍然是单线程设计,无需担心锁。同样对于#2,可以使用更有效的算法和/或数据结构布局来实现性能。