C#插件是Assembly.LoadFrom()。。。上课慢一点?
我正在制作一个使用dll插件的音频应用程序,这些插件是使用 Assembly.LoadFrom(文件).GetTypes()。。。和Activator.CreateInstance(T)C#插件是Assembly.LoadFrom()。。。上课慢一点?,c#,reflection,plugins,C#,Reflection,Plugins,我正在制作一个使用dll插件的音频应用程序,这些插件是使用 Assembly.LoadFrom(文件).GetTypes()。。。和Activator.CreateInstance(T) 我的问题不是加载过程是否缓慢,初始化时间是否不重要,我是问一个插件内部是否有音频处理循环,这将比我直接添加类而不使用插件要慢???一旦程序集加载到内存中并使用“Activator.CreateInstance(t)”实例化方法,它的性能应该与直接引用没有区别。这似乎很奇怪 加载程序集时,没有区别 因此,我建议对
我的问题不是加载过程是否缓慢,初始化时间是否不重要,我是问一个插件内部是否有音频处理循环,这将比我直接添加类而不使用插件要慢???一旦程序集加载到内存中并使用“Activator.CreateInstance(t)”实例化方法,它的性能应该与直接引用没有区别。这似乎很奇怪 加载程序集时,没有区别 因此,我建议对这些进行诊断:
我希望这些技巧可以帮助您~一旦加载了DLL的内容,性能应该与直接引用DLL时相同。 这是因为DLL的内容将加载到当前进程的内存中。 因此,访问内存将具有与直接引用时相同的性能,CPU时间将与直接引用时相同 只有初始加载速度会慢得多
这家伙使用LoadFrom做了一些惊人的事情对测试应用程序进行分析,从两个方面进行分析,然后自己找出答案。它实际上相当简单,程序集中的IL被即时编译器翻译成机器代码。只有一种机器代码,没有低版本或快速版本,抖动不在乎IL来自何处。插件是你不会直接引用它的。所谓激活,我指的是实例化。:)你所说的激活到底是什么意思?从该程序集创建类型的实例(例如使用
Activator.createInstance()
)?因为你的回答不太清楚。谢谢,这是答案,但我想你错过了一些解释:)