0

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

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

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

4

1 回答 1

1

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

如果 dll 有分配给进程的私有内存,则不能交换,那么这确实很重要,并且会减少工作集。

所以答案是视情况而定。它不能保证有任何区别,如果不使用 dll,那么它将被换出并且不是当前工作集的一部分。除非您喜欢保持整洁,否则您最好不要费心卸载它。

减少工作集的唯一方法是让您的应用程序使用更少的内存。作为一个 .NET 应用程序,您可能根本无法控制它(因为 GC 会自行决定工作集中需要多少内存是“活动的”)

于 2008-10-17T21:03:19.833 回答