【问题标题】:Compare memory footprint of .Net and VB6 applications比较 .Net 和 VB6 应用程序的内存占用
【发布时间】:2010-09-20 05:09:29
【问题描述】:

我一直在尝试比较 VB6 应用程序和 .Net 应用程序之间的内存占用。试图确定两者之间的平均差异是多少。

.Net 代码大部分是 VB6 的直接翻译,并且大部分具有与在 C# 中编程相同的指令。因此,虽然这是一个苹果与橘子的比较,但它是对功能(如果不是逻辑上)等效的程序的比较。

我一直在使用Process Explorer 来帮助我确定应用程序的内存使用情况,但是有一些地方让我感到困惑:

  1. 我一直在尝试确定总体内存消耗。我应该使用哪个进程内存列。到目前为止,我一直在研究工作集。
  2. 为了比较应用程序中 DLL 的大小,PExplorer 显示 Size、WS Total 和其他 WS 计数器,如何解释这些?为什么 Size 与 WS Total 如此不同,不应该是一样的吗?

到目前为止,我已经收集到 WS Total 包括 WS Private 和 WS Shareable。因此,仅使用 WS Total 可能是一种欺骗性措施。我还从诸如.Net exe memory footprint 之类的问题中读到,.Net 工作集通常比它应该的要大。在内存匮乏的环境中实例化进程,比如 128 MB 的 VM 会将工作集大小减少到最小吗?

任何帮助或见解将不胜感激。

【问题讨论】:

    标签: .net performance memory vb6


    【解决方案1】:

    Mark Russinovich 对此有一个good essay

    您可以使用 Win32 API 调用 SetProcessWorkingSetSize(GetCurrentProcess(), -1, -1) 手动减少应用的工作集。这是 Windows 在系统内存不足时无论如何都会执行的操作,但您可以自行控制何时发生这种情况,以便您将 .NET 应用程序的工作集剥离到其最小大小以进行调查。

    【讨论】:

    • 我读了那篇文章,并没有给我留下深刻的印象,因为他并没有真正深入细节。例如,哪些 DLL 占用了更多资源?而且分析有点缺陷,在我的例子中,源代码至少与原始代码尽可能接近。
    • 您的第二个网址无效。你能提供更多关于如何减少工作集的信息吗?
    • 链接已永久损坏,因此我添加了 Win32 API 调用以供使用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-03
    • 2016-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多