首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >利用多线程加速.NET反射

利用多线程加速.NET反射
EN

Stack Overflow用户
提问于 2009-05-04 04:13:26
回答 2查看 935关注 0票数 2

我的PC有一个双核CPU,我在想,如果我开始在两个线程中处理,是否可以将.NET反射时间减少两个。

我所说的“处理”指的是:

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

如果是的话,什么是最好的(绩效方面的)策略:

  1. 将所有程序集加载到一个线程中,然后在两个并发线程中处理metainfo,
  2. 加载并在其自己的线程

中处理每个程序集。

EN

回答 2

Stack Overflow用户

发布于 2009-05-04 05:35:57

有几件事要记住:

启动一个新线程的

  • 成本很高,因此,如果任务寿命很短,则开销可能会很大。通过使用线程池而不是启动自己的线程,线程池将确保尽可能地重用线程。但是,在短时间内启动许多任务并不能获得当前线程池实现的最佳结果。
  • ,因为您的特定任务涉及一些I/O,这可能是操作中最昂贵的部分。分叉几个线程等待I/O可能不会产生更好的性能。除非你测量它,否则你是无法真正分辨的。
  • 如果将数据存储在共享存储库中或输出到文件/屏幕中,则必须围绕该文件/屏幕进行同步。这显然降低了并发性。
票数 3
EN

Stack Overflow用户

发布于 2009-05-04 04:21:09

在我的经验中,除非您处理的是绝对庞大的库,否则反射加载并不是一件非常慢的事情。这有可能是在浪费你的时间。

尽管如此,看看ThreadPool.QueueUserWorkItem,让这件事变得很容易。

代码语言:javascript
复制
foreach (Assembly a in "folder/something") {
    ThreadPool.QueueUserWorkItem((object assem) => {
        // do work
    }, a);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/818756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档