.net - 如何减少网络上运行的 .Net dll 数量

标签 .net networking dll ngen

我们有一个包含大量 .dll 文件的 .Net Framework 4 软件解决方案。

这些文件托管在网络服务器上,并从公共(public)远程文件夹上的客户端运行。

我们希望减少此服务器文件夹中 .dll 文件的数量。

确实出现了一些问题:

  • 较大的合并 .dll 的启动/或执行速度会比众多较小的 .dll 慢/快吗?
  • 通过网络库文件使用 NGen 是否有好处,以便针对每个客户端进行优化?

大多数 .dll 实际上是通过 COM 可见接口(interface)从 32 位非托管代码调用的。

最佳答案

单个较大的 DLL 的启动或执行速度不应比多个较小的 DLL 慢。由于操作系统不需要做那么多的初始化工作,因此启动速度可能会更快。然而,我怀疑您是否会注意到其中的差异。拥有更少的 DLL 会稍微减少程序的内存占用。再说一次,不是很多。

我不建议在通过网络提供服务的 DLL 上运行 NGen。 NGen 旨在针对其运行的处理器进行编译和优化。如果您的客户端计算机具有不同的架构,NGen 镜像可能不是最佳的,或者可能无法工作。

评论后补充:

参见Improving Application Startup Time有关改善启动时间的更多信息。另外Writing High-Performance Managed Applications : A Primer .

另请注意,加载程序不会 JIT 整个程序集。它根据需要进行 JIT。如果您的程序不使用程序集中的类,则该类的代码将永远不会被 JITted。此外,方法在第一次使用之前不会进行 JIT 处理。因此,如果您从不调用方法 Foo.Bar(),那么它永远不会被 JITted。

关于.net - 如何减少网络上运行的 .Net dll 数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7244588/

相关文章:

.net - C++.net 单行代码破坏了智能感知?

c - 你如何处理未知数量的命令行参数?

networking - 网络单元定义 : Fragment, 段、数据包、帧、数据报

c++ - 需要在 C++ 中初始化的持久全局数据

c# - 如何使用 "is"来测试类型是否支持 IComparable?

c# - 在控制台应用程序中异步和等待

c# - 使用 SqlCommand,如何向其对象添加多个参数,通过 winform 插入 sql 表

java - InetAddress 类中的 isReachable 问题

c++ - 如何设置 Visual Studio 来调试 DLL ("Unable to start program error")

c# - Visual Studio 添加与 dll 同名的可执行文件