一个应用程序包含许多DLL文件,这是一种不好的做法吗?

3

有很多DLL依赖性是否比尽可能静态链接更好?

谢谢


任何dll文件有多大可能会更改,您要发布多少个dll文件? - James Black
不知道这是好还是坏的做法,有点取决于它对应用程序的影响。但我确实发现只看到一个 .exe 文件更清晰。 - mingos
6个回答

8
不,将许多DLL文件打包是没有问题的做法;但是将它们放在%System32%中是不好的做法。实际上,通常使用DLL文件而不是静态链接是一个好习惯。首先,你可以轻松地替换需要更新的DLL文件,而不必替换整个二进制文件;其次,如果你的程序最终需要多个共同工作的可执行文件,你只需要支付一份DLL代码副本(而静态链接则会导致重复相同的代码)。

您只需支付磁盘上 DLL 的一份副本费用;在 RAM 中,它会被每个可执行文件复制。 - Ioan
如果有其他应用程序使用例如Qt.dll,除非它们放在系统中,否则很难确保您只有一个DLL副本。通常,您能做的最好的事情是跨公司共享DLLS。 - Martin Beckett
@loan,它可以被实现为写时复制...我不知道Windows实际上是如何实现的。 - Michael Aaron Safyan
@马丁,但这是正确的行为。在整个系统范围内强制使用单个DLL是引发DLL地狱的好方法。有办法宣传DLL的存在,而无需强制所有其他人复制该DLL,也无需干扰系统文件。 - Michael Aaron Safyan

0

正如其他人所提到的,使用大量DLL并不是一种不好的做法。请仔细考虑每个DLL中应该放置哪些内容。我喜欢将DLL保持尽可能“小岛状”。如果这些将被分发,我喜欢有一个特定的命名约定,反映产品和/或公司名称和/或某种缩写。


0

只是想从其他使用许多动态加载DLL的程序中添加另一个观察结果。例如,GIMP及其插件。您加载DLL的方式将影响客户端感知的应用程序速度,如果这是其他非常好的因素之一(更新,重用等)。我相信操作系统加载DLL会有一些开销,并且您可能会遇到进程限制(如打开文件句柄)。拥有非常多的非常小的DLL可能不如“比那个小”的数量的“比那个大”的DLL所需。


0

拥有静态链接会使您的应用程序占用大量内存,因此从这个角度来看,拥有DLL更好,即您只加载所需内容。现在通常通过安装程序进行安装,因此拥有许多DLL并不重要。


0

我不认为这是一种不好的做法。看看 Office 或 Adobe 等大型应用程序。它们最终会有很多 DLL -- 因为否则它们就必须把所有东西打包到一个 100M+ 的 exe 中。

当你不绝对需要它们时,将事物分解成 DLL。


2
我不是不同意你的观点。但我也不能把Office或Adobe作为良好软件工程的例子。因为它们已经存在了很多年,推出了很多版本。有很多东西只是历史原因造成,而且改起来太昂贵,或者是由于数百或数千名开发人员在同一产品上工作所致。 - KeithB
@KeithB: 我不知道。我猜想任何大规模的应用程序都需要划分成动态加载组件--否则,如果用户没有访问某些功能,你将付出浪费性能的代价。Web应用程序使用单独的脚本文件来完成这个过程;而游戏则使用资源文件来实现(游戏主要是内容;有些游戏将所有东西都打包成一个大文件,但它们会分段加载,同样的原理隐藏在优化技巧背后)等等。 - kizzx2
1
我并不反对使用多个DLL。我想说的是,“Office这样做,所以这一定是一个好主意”并不能成为有说服力的论据。 - KeithB

0

一般来说这不是坏习惯。将程序代码分割成单独的动态库更好,特别是当所提供的函数从多个可执行文件中使用时。 这并不意味着每个程序都应该将其代码分割为多个动态库;对于简单实用程序来说,这可能并不需要。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接