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

标签 c# reflection assemblies

在我的应用程序中,我需要在单击鼠标时显示一个表单。问题在于该窗体位于另一个程序集中,并且由于程序集加载的延迟性质,很可能在按下鼠标按钮时尚未加载该程序集。所以在表格最终出现之前,我有非常明显的停顿。

我能够通过在我的初始化方法中调用 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/

相关文章:

c# - 调用 Assembly.Load(byte[]) 可以引发 AppDomain.AssemblyResolve 事件吗?

c# - Assembly.CreateInstance 和 Activator.CreateInstance 之间的区别?

sql - 使用 Visual Studio 2008 部署 SQL 项目时出错

c# - 下拉控件选中的索引更改事件

c# - C# 中的 HttpWebRequest?

c# - 跨 .Net 平台序列化 TypeInfo/Type

c# - 当两个引用的程序集都定义类型 A.A1 时出现问题

c# - ManagementScope 和 "root\cimv2"?

c# - Image.FromStream 内存不足异常

java - 在 Java 中创建带注释的对象时收到通知