为单个方法引用一个大的DLL

本文关键字:一个 DLL 单个 方法 引用 | 更新日期: 2023-09-27 18:18:32

我想使用c#中一个大型class库-dll中的单个方法。

在性能或其他方面有什么缺点吗?
我应该用反射工具"阅读"方法代码并将其复制粘贴到我的项目中吗?

更新:硬盘空间不是问题。我的应用程序是web应用程序。

为单个方法引用一个大的DLL

在性能或其他方面有什么缺点吗?

唯一真正重要的是你的可分发文件的大小,如果它对你很重要的话。(用户下载30mb的文件,而不是2mb的)。性能差异可以忽略不计。程序集绑定和验证强名称(如果已签名)哈希可能需要更长的时间,但不太可能被用户注意到。

我应该用反射工具"阅读"方法代码并将其复制粘贴到我的项目中吗?

可能不是;大多数许可条款禁止逆向工程和/或只禁止部分分发。检查许可证,如果有的话,看看你是否可以先做。

不,把它留给JIT编译器。它已经有选择性地将IL转换为机器码,它只编译实际执行的代码。你会损失一些虚拟内存地址空间,但这不会造成任何损失,因为它是虚拟的。你不用为你不用的东西买单。

成本是磁盘空间、加载时间和内存占用。JIT编译器将只编译您调用的代码(可能需要注意,但它肯定不会编译整个程序集)。这是你自己的决定,是否值得你去"撕下"你需要的方法。当然,请记住这可能是一个兔子洞,我的意思是这个方法可能会在其程序集中使用其他类,因此提取所需代码可能不像您想象的那么简单。

呸,极端情况下的极端黑客需求。在我看来,复制方法代码(如果可能的话)是极端的黑客行为。

  1. 如果只是沮丧地使用不必要的内存,但基本上是相当实惠的解决方案,就像你继续做的那样。简单易行。

  2. 如果有内存问题,并且该方法没有太频繁地调用(太频繁取决于您的项目),您可以尝试在外部AppDomain中加载它,并卸载该域一次完成它。当然,在这种情况下,您需要注意IPC管理。这个世界上没有免费的东西。

  3. 你可以try做你写的。用户Reflector(或类似的软件),获取方法的c#代码并创建它的克隆。所有这些假设这个方法不使用DLL的内部结构,状态等等,因为在这种情况下,情况变得相当复杂。

好运。