.net - 使用多线程加速 .NET 反射

标签 .net multithreading reflection multicore

我的电脑有一个双核 CPU,我想知道 - 如果我开始在两个线程中进行处理,是否可以将 .NET 反射时间减少两倍。

我所说的“处理”是指以下内容:

1.加载程序集 2.获取所有类型(.GetTypes()) 3.处理这些类型 4.查询这些类型的方法 等等

如果是 - 最好的(性能方面)策略是什么:

  1. 在一个线程中加载所有程序集,然后在两个并发线程中处理元信息
  2. 在自己的线程中加载并处理每个程序集

最佳答案

有几点需要记住:

  • 启动一个新线程的成本很高,因此如果任务是短期的,开销可能会令人望而却步。通过使用线程池而不是启动您自己的线程,线程池将确保最大限度地重用线程。然而,在当前线程池实现中,短时间内启动大量任务并不能产生最佳结果。

  • 由于您的特定任务涉及一些 I/O,这可能是操作中最昂贵的部分。 fork 多个线程来等待 I/O 可能不会产生更好的性能。在测量之前你无法真正判断。

  • 如果您将数据存储在共享存储库中或输出到文件/屏幕,则必须对此进行同步。这显然降低了并发性。

关于.net - 使用多线程加速 .NET 反射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/818756/

相关文章:

jquery - 更改库 graphdracula 中的字体大小

.net - 如何指定要从表达式树方法返回的对象?

.net - C# 中数据表数组的垃圾收集处理

asp.net-mvc - 在 ASP.NET MVC 中异步使用 WebClient?

c# - 无法通过反射更改只读字段

c# - DirectorySecurity 设置特殊权限,而 FileSecurity 没有

multithreading - mkl_set_num_threads() 是否受物理内核数量的限制?

c# - LINQ to SQL DAL,这个线程安全吗?

c# - 在存储对象中调用方法

Java 反射 : wait() method repeat thrice. 为什么?