代码之家  ›  专栏  ›  技术社区  ›  Achilles

有许多DLL的应用程序是一件坏事吗?

  •  23
  • Achilles  · 技术社区  · 14 年前

    我们有一个enterpise web应用程序,它确实由4个编译组件(DLL)组成。一年多前,我们开始实现更细粒度的组件,试图隔离功能,减少耦合,降低重新编译和部署大量代码块的风险。虽然没有人认为这种方法在添加新功能和修补bug时为我们提供了更大的灵活性和上市速度,但这些应用程序现在由近40个dll组成。我们有一个命名约定,可以很好地识别组件。

    我的问题是:一个有很多DLL的应用程序有什么缺点(性能、维护等)?

    编辑:我们正在探索将代码重构成更大组件的方法,我认为这可能是某种回归。。。

    5 回复  |  直到 8 年前
        1
  •  15
  •   Henk Holterman    14 年前

    我的问题是:有没有 等…)来申请

    有很多DLL的缺点?不
    DLL太多的缺点是什么?当然。

    程序集是一种组织方式,就像名称空间和类一样。名称空间定义逻辑边界,程序集定义物理边界。

    您应该尽量保持程序集的一致性,并将它们视为系统模块。

        2
  •  12
  •   LBushkin    14 年前

    将独立的功能域分离成单独的DLL通常是一个简单的方法

    但是,将多个组件作为系统的一部分引入也有缺点:

    1. 加载、验证和JIT多个程序集需要更长的时间。
    2. 通过在单个程序集中部署更改来更新应用程序可能是不明智的。 通常将一个应用程序划分为单独的dll会给人留下这样的印象:只需替换它的一些程序集就可以修复或增强它。当然,如果这些程序集中的类和方法的副作用或未记录的行为发生了变化,它可能会引入细微的bug。
    3. ReSharper和codelush等工具在分析跨多个程序集划分的代码时有一些限制。
    4. 它可以鼓励开发人员公开更多的类型。
        3
  •  7
  •   Darin Dimitrov    14 年前

    维护-不,性能-是。需要加载的程序集越多,应用程序启动越慢。对于需要加载到AppDomain的每个程序集,加载程序需要执行一系列验证。

        4
  •  5
  •   Tim Robinson    14 年前

    • 构建时间: 编译器为每个DLL运行一次,DLL必须复制到输出目录或从输出目录复制
    • 加载次数:
    • DLL越多,两个DLL在虚拟内存中发生冲突的可能性就越大。这不会造成问题,因为Windows可以重新设置其中一个DLL页的基址,但重新设置基址的过程需要时间,而且Windows必须提前从磁盘加载任何受影响的DLL页。重新调整通常不会对托管DLL产生太大影响。
    • Visual Studio开销: 一个DLL=一个项目=IDE的更多工作

        5
  •  3
  •   Stephen Cleary    14 年前

    别忘了 ILMerge