【发布时间】:2010-03-27 10:33:18
【问题描述】:
只是想要一些关于多线程任务的“最佳实践”的建议。
例如,我们有一个 C# 应用程序,它在启动时从数据库中的各种“类型”表中读取数据,并将信息存储在我们在应用程序周围传递的集合中。这可以防止我们在每次需要这些信息时访问数据库。
此时应用程序正在同步从 10 个表中读取数据。我真的很想让应用程序从不同线程中的每个表中读取,所有这些都并行运行。应用程序将等待所有线程完成,然后再继续启动应用程序。
我已经研究过 BackGroundWorker,但只是想要一些关于完成上述工作的建议。
- 为了加快我们的应用程序的启动时间,该方法听起来合乎逻辑吗
- 我们如何最好地处理所有线程,记住每个线程的工作是相互独立的,我们只需要等待所有线程完成后再继续。
我期待一些答案
【问题讨论】:
-
看看并行任务库,这确实会为您简化事情。
-
您指的是任务并行库 (TPL) 吗?我会调查的
-
TPL 非常适合这一点,但至少需要 .NET 3.5sp1(如果您安装 Rx)或 .NET 4 RC(内置框架)才能使用....您建议您需要.NET 2 解决方案。
-
出于好奇,您是否尝试过这些解决方案并发现性能优势?如果您正在读取的基础数据来自同一来源,那么使读取并行可能根本没有任何好处,因为无论如何它们最终都会相互等待资源访问。所发生的只是额外的上下文切换开销。多线程实际上只对性能有益,如果 a) 你实际上有多个内核 b) 你被计算控制而不访问共享资源
-
如果这个问题有一个被接受的答案,那就太好了,尤其是有很多不同的用户为此付出了时间
标签: c# multithreading backgroundworker