我的电脑有一个双核 CPU,我想知道 - 如果我开始在两个线程中进行处理,是否可以将 .NET 反射时间减少两倍。
我所说的“处理”是指以下内容:
1.加载程序集 2.获取所有类型(.GetTypes()) 3.处理这些类型 4.查询这些类型的方法 等等
如果是 - 最好的(性能方面)策略是什么:
- 在一个线程中加载所有程序集,然后在两个并发线程中处理元信息
- 在自己的线程中加载并处理每个程序集
最佳答案
有几点需要记住:
启动一个新线程的成本很高,因此如果任务是短期的,开销可能会令人望而却步。通过使用线程池而不是启动您自己的线程,线程池将确保最大限度地重用线程。然而,在当前线程池实现中,短时间内启动大量任务并不能产生最佳结果。
由于您的特定任务涉及一些 I/O,这可能是操作中最昂贵的部分。 fork 多个线程来等待 I/O 可能不会产生更好的性能。在测量之前你无法真正判断。
如果您将数据存储在共享存储库中或输出到文件/屏幕,则必须对此进行同步。这显然降低了并发性。
关于.net - 使用多线程加速 .NET 反射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/818756/