在运行时加速加载程序集

时间:2020-04-14 02:38:06

标签: c# .net winforms performance portability

我正在尝试使我的应用程序具有可移植性,这意味着将依赖项嵌入到应用程序本身中。我正在使用此代码:

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毫秒。有什么办法可以加快速度吗? 谢谢。

1 个答案:

答案 0 :(得分:0)

您实际上是在对程序集使用动态加载。 您可以尝试静态链接可执行文件。

dotnet/ILMerge将您的从属程序集合并为一个程序集。

尽管有一些注意事项-语言资源程序集无法正常工作,并且您只能合并托管的DLL。

您始终可以使用命令行,但是建议的方法是将构建目标添加到您的项目文件中:

  <Target Name="ILMerge">
    <Exec Command="ilmerge.exe /out:app.exe Assem1.dll Assem2.dll" />
  </Target>

并使用:

msbuild /t:ILMerge
相关问题