我有一个正在开发的应用程序,这是当前的外观。
我想知道我是否可以得到一些帮助,以使其效率更高一些。
还希望利用任务并行库(如果有帮助的话)。
目前,事物的设计方式没有任何限制,这意味着我可以完全重新设计应用程序的任何部分。
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);
}
}
谢谢你的帮助
最佳答案
这全都取决于“有效”的含义,要解决的问题以及维护多线程设计的成本。
对于一些非常笼统的建议,多线程设计适合以下三种类型的问题:
上面的操作有点过分简化了,但要点是,请确保您正在解决正确的问题,而不是将问题强加到预先设想的解决方案中。决定使用多线程设计时需要考虑许多因素。自动化测试将变得更加困难。您的设计是否可以通过执行的正确性(没有崩溃/挂起/数据损坏)以及您对特定应用程序的性能定义进行维护?当然,TPL使多线程设计更加容易,但绝对不能完全消除这些成本。
始终考虑替代方案。例如,上面的#1也可以使用异步方式完成,也许稍后会在您的调用线程上运行I/O回调(即使这是内部多线程的,但您不必在意)。这仍然是单线程设计,无需担心锁。同样对于#2,可能有可能使用更有效的算法和/或数据结构布局来实现性能。
关于.net - 需要有关如何将其编写为多线程应用程序的指南,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4555022/