【问题标题】:C# plugins, are Assembly.LoadFrom()... classes slower?C# 插件,Assembly.LoadFrom()... 类慢吗?
【发布时间】:2012-02-29 02:56:54
【问题描述】:

我正在制作一个使用 dll 插件的音频应用程序,这些插件是使用 Assembly.LoadFrom(file).GetTypes()... 以及 Activator.CreateInstance(T)。

我的问题不是加载过程是否缓慢,初始化时间并不重要,我问的是插件内部是否有音频处理循环,这会比我直接添加类而不使用插件??

【问题讨论】:

  • 对测试应用程序进行双向分析,然后自己找出答案。其实很简单。
  • 程序集中的 IL 被即时编译器翻译成机器代码。只有一种机器代码,没有低版本或快版本,而且抖动并不关心 IL 来自哪里。

标签: c# reflection plugins


【解决方案1】:

一旦程序集加载到内存中并使用“Activator.CreateInstance(T)”方法进行实例化,它的性能应该与直接引用没有什么不同。

【讨论】:

  • 插件你不会直接引用它。
  • 激活是指实例化。 :)
  • 激活到底是什么意思?从该程序集中创建类型的实例(例如使用Activator.CreateInstace())?因为从你的回答中看不太清楚。
  • 谢谢答案,但我认为你错过了一些解释:)
【解决方案2】:

加载 DLL 的内容后,性能应该与使用直接引用它的性能相同。 那是因为 DLL 的内容将被加载到当前进程的内存中。 所以访问内存将与直接引用一样具有相同的性能,并且将像直接引用一样共享CPU时间。

只有初始加载会慢很多。

这家伙使用 LoadFrom 做了一些了不起的事情http://www.codeproject.com/Articles/4610/Three-Ways-to-Inject-Your-Code-into-Another-Proces

【讨论】:

    【解决方案3】:

    这看起来很奇怪......

    加载程序集时,没有区别...

    所以,我建议对这些进行诊断:

    1. 程序集是否加载在同一个应用程序域中?
    2. 您加载的程序集是在调试模式还是发布模式下编译的?
    3. 检查您的反思行动,因为反思会对绩效产生负面影响
    4. 检查汇编.net运行时版本,是不是并行导致的性能问题?

    希望这些小贴士可以帮到你~

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-16
      • 1970-01-01
      • 1970-01-01
      • 2011-01-03
      • 1970-01-01
      相关资源
      最近更新 更多