在我的应用程序中,我需要在单击鼠标时显示一个表单。问题在于该窗体位于另一个程序集中,并且由于程序集加载的延迟性质,很可能在按下鼠标按钮时尚未加载该程序集。所以在表格最终出现之前,我有非常明显的停顿。
我能够通过在我的初始化方法中调用 new FormFromAnotherAssembly()
来提出一个愚蠢的修复。当然,这解决了问题,暂停不再存在,但它非常丑陋。我唯一喜欢这个解决方案的地方是我不必弄乱路径和程序集名称,如果我想使用类似 Assembly.Load
的东西,我必须这样做。
那么,如果我想确保程序集在我实际需要之前加载,那么选择什么好的、可靠的解决方案呢?
提前致谢。
最佳答案
在您的 init 中显式预加载可能仍然是您的最佳选择。
typeof(SomeTypeFromAnotherAssembly)
应该足够了——还有一些无法优化的不透明方法;也许:
GC.KeepAlive(typeof(SomeTypeFromAnotherAssembly));
这避免了 new
。请注意,这将被加载,但不会被 JITted 等
如果你愿意,你可以在 BG 线程上进行:
private static void LoadSomeStuff(object state) {
GC.KeepAlive(typeof(SomeTypeFromAnotherAssembly));
}
...
ThreadPool.QueueUserWorkItem(LoadSomeStuff);
关于c# - 预加载 .NET 程序集的好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4895719/