【问题标题】:Can the working set of a managed app be reduced by unloading unmanaged libraries with AfxFreeLibrary?可以通过使用 AfxFreeLibrary 卸载非托管库来减少托管应用程序的工作集吗?
【发布时间】:2010-09-17 20:05:06
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# .net unmanaged managed


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2023-02-06
      • 1970-01-01
      • 2021-08-04
      • 2012-01-24
      • 2011-03-04
      • 1970-01-01
      • 1970-01-01
      • 2010-10-01
      • 1970-01-01
      相关资源
      最近更新 更多