在运行时加速加载程序集
Speeding up loading assemblies at runtime
我正在尝试使我的应用程序可移植,这意味着将我的依赖项嵌入到应用程序本身中。我正在使用此代码:
AppDomain.CurrentDomain.AssemblyResolve += (sender, e) =>
{
string resource = nameof(x) + "." + new AssemblyName(e.Name).Name + ".dll";
if (resource.EndsWith(".resources.dll"))
{
return null;
}
using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resource))
{
byte[] data = new byte[stream.Length];
stream.Read(data, 0, data.Length);
Assembly assembly = Assembly.Load(data);
return assembly;
}
};
在运行时加载程序集。但是,它很慢。从开始到 Form.Shown 事件大约需要 1.2 秒,在运行时加载程序集占用了 400 毫秒。有什么办法可以加快速度吗?
谢谢
您实际上是在对程序集使用动态加载。
您可以尝试静态链接您的可执行文件。
dotnet/ILMerge 将您的依赖程序集合并为一个程序集。
但有一些注意事项 - 语言资源程序集无法正常工作,您只能合并托管 DLL。
您始终可以使用命令行,但推荐的方法是将构建目标添加到您的项目文件中:
<Target Name="ILMerge">
<Exec Command="ilmerge.exe /out:app.exe Assem1.dll Assem2.dll" />
</Target>
并构建:
msbuild /t:ILMerge
我正在尝试使我的应用程序可移植,这意味着将我的依赖项嵌入到应用程序本身中。我正在使用此代码:
AppDomain.CurrentDomain.AssemblyResolve += (sender, e) =>
{
string resource = nameof(x) + "." + new AssemblyName(e.Name).Name + ".dll";
if (resource.EndsWith(".resources.dll"))
{
return null;
}
using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resource))
{
byte[] data = new byte[stream.Length];
stream.Read(data, 0, data.Length);
Assembly assembly = Assembly.Load(data);
return assembly;
}
};
在运行时加载程序集。但是,它很慢。从开始到 Form.Shown 事件大约需要 1.2 秒,在运行时加载程序集占用了 400 毫秒。有什么办法可以加快速度吗? 谢谢
您实际上是在对程序集使用动态加载。 您可以尝试静态链接您的可执行文件。
dotnet/ILMerge 将您的依赖程序集合并为一个程序集。
但有一些注意事项 - 语言资源程序集无法正常工作,您只能合并托管 DLL。
您始终可以使用命令行,但推荐的方法是将构建目标添加到您的项目文件中:
<Target Name="ILMerge">
<Exec Command="ilmerge.exe /out:app.exe Assem1.dll Assem2.dll" />
</Target>
并构建:
msbuild /t:ILMerge