通过使用AfxFreeLibrary卸载非托管库,可以减少托管应用程序的工作集吗?

StackOverflow https://stackoverflow.com/questions/213627

  •  03-07-2019
  •  | 
  •  

我有一个托管的Windows应用程序,它加载一个托管的C ++组件,该组件使用AfxLoadLibrary加载第三方组件(如果存在于客户端计算机上)。一旦检测到,我将使用AfxFreeLibrary卸载组件,以尝试降低托管父应用程序的工作集。

对AfxFreeLibrary的调用成功(使用Process Explorer验证),但没有释放内存。这是由于托管应用程序的性质,还是有办法释放这个进程空间?

我一直在寻找替代方法来解决这个问题,因为代码已经在生产中,而我想知道卸载的方法是否值得。

有帮助吗?

解决方案

应该这样做,您可以通过编写纯本机应用程序并查看工作集来证明它。 但是,工作集是运行应用程序所需的内存大小,因此如果可以换出dll使用的代码,那么工作集将不会减少 - Windows不会将其视为工作集的一部分

如果dll具有分配给进程的私有内存,无法交换,那么它会计数并减少工作集。

所以答案是它取决于。它不能保证有任何区别,如果没有使用dll,那么它将被换出并且不是当前工作集的一部分。除非你想保持整洁,否则你可能不会费心去卸货。

减少工作集的唯一方法是让您的应用使用更少的内存。作为一个.NET应用程序,很可能你根本没有太多的控制权(因为GC会自己考虑工作集中需要多少内存'活动')

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top