预加载.NET程序集的好方法

Dyp*_*ppl 23 c# reflection assemblies

在我的应用程序中,我需要在鼠标单击时显示一个表单.问题是表单在另一个程序集中,并且由于程序集加载的惰性,很可能在按下鼠标按钮时尚未加载程序集.因此,在表单最终出现之前,我所拥有的是非常明显的暂停.

通过调用new FormFromAnotherAssembly()我的初始化方法,我能够得到一个愚蠢的修复.那当然是照顾好事情,停顿不再存在,但它非常难看.我唯一喜欢这个解决方案的是,如果我想使用类似的东西,我不必弄乱我必须要做的路径和程序集名称Assembly.Load.

那么,如果我想确保在实际需要之前加载程序集,那么选择好的,强大的解决方案是什么?

提前致谢.

Mar*_*ell 20

初始化中的显式预加载可能仍是您的最佳选择.

a typeof(SomeTypeFromAnotherAssembly)应该足够了 - 还有一些无法优化的不透明方法; 也许:

GC.KeepAlive(typeof(SomeTypeFromAnotherAssembly));
Run Code Online (Sandbox Code Playgroud)

这避免了new.请注意,这将被加载,但不会加载 JIT等.

如果你愿意,你可以在BG线程上做到:

private static void LoadSomeStuff(object state) {
    GC.KeepAlive(typeof(SomeTypeFromAnotherAssembly));
}
...
ThreadPool.QueueUserWorkItem(LoadSomeStuff);
Run Code Online (Sandbox Code Playgroud)