为单个方法引用一个大DLL

我想在C#中使用一个大类库-dll中的单个方法。

性能还是其他任何缺点?
我应该用reflection工具“读取”方法代码并将其复制粘贴到我的项目中吗?

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

性能还是其他任何缺点?

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

我应该用reflection工具“读取”方法代码并将其复制粘贴到我的项目中吗?

可能不是; 大多数许可条款禁止逆向工程和/或仅部分分发。 检查许可证(如果有),看看您是否可以先执行此操作。

不,把它留给JIT编译器。 它已经选择IL实际变成机器代码,它只编译实际执行的内容。 你将失去一些虚拟内存地址空间,但这不会花费任何东西,它是虚拟的。 你不支付你不使用的东西。

成本是磁盘空间,加载时间和内存占用。 JIT编译器只会编译您调用的内容(可能会有一些警告,但它肯定不会编译整个程序集)。 关于你是否值得“扯掉”你需要的方法,这是你的号召。 记住当然这可能是一个兔子洞,我的意思是这个方法很可能在它的程序集中使用其他类,所以它可能不像你想象的那样简单地提取你需要的代码。

Bah,在极端情况下需要极端的黑客攻击。 复制方法代码(如果可能的话) 极端的黑客攻击,imo。

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

  2. 如果存在内存问题,并且该方法调用过于频繁( 常常取决于您的项目),您可以尝试将其加载到外部AppDomain ,并在完成后卸载该域。 在这种情况下,您确实需要注意IPC管理。 这个世界上没有任何东西是免费的。

  3. 你可以尝试做你写的。 用户reflection器(或类似软件),获取方法C#代码并创建其克隆。 所有这些假设该方法不使用DLL的内部结构,状态或其他,导致在这种情况下故事变得相当复杂。

祝好运。