C#插件是Assembly.LoadFrom()。。。上课慢一点?

C#插件是Assembly.LoadFrom()。。。上课慢一点?,c#,reflection,plugins,C#,Reflection,Plugins,我正在制作一个使用dll插件的音频应用程序,这些插件是使用 Assembly.LoadFrom(文件).GetTypes()。。。和Activator.CreateInstance(T) 我的问题不是加载过程是否缓慢,初始化时间是否不重要,我是问一个插件内部是否有音频处理循环,这将比我直接添加类而不使用插件要慢???一旦程序集加载到内存中并使用“Activator.CreateInstance(t)”实例化方法,它的性能应该与直接引用没有区别。这似乎很奇怪 加载程序集时,没有区别 因此,我建议对

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


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

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

这似乎很奇怪

加载程序集时,没有区别

因此,我建议对这些进行诊断:

  • 程序集是否加载在同一应用程序域中
  • 加载的程序集是在调试模式还是发布模式下编译的
  • 检查您的反射操作,因为反射对性能有负面影响
  • 检查assembly.net运行时版本,性能问题是由并排引起的吗

  • 我希望这些技巧可以帮助您~

    一旦加载了DLL的内容,性能应该与直接引用DLL时相同。 这是因为DLL的内容将加载到当前进程的内存中。 因此,访问内存将具有与直接引用时相同的性能,CPU时间将与直接引用时相同

    只有初始加载速度会慢得多


    这家伙使用LoadFrom做了一些惊人的事情

    对测试应用程序进行分析,从两个方面进行分析,然后自己找出答案。它实际上相当简单,程序集中的IL被即时编译器翻译成机器代码。只有一种机器代码,没有低版本或快速版本,抖动不在乎IL来自何处。插件是你不会直接引用它的。所谓激活,我指的是实例化。:)你所说的激活到底是什么意思?从该程序集创建类型的实例(例如使用
    Activator.createInstance()
    )?因为你的回答不太清楚。谢谢,这是答案,但我想你错过了一些解释:)