sos.dll 返回的对象大小与内存中进程大小不匹配

2024-01-14

我使用以下 sos 命令来枚举正在运行的 asp 应用程序(托管在 Windows xp 4 GB 计算机上)中特定类型的所有实例。

.foreach (obj { !dumpheap -type ::my type:: -short ::start of address space:: ::end of address space:: }) { !objsize ${obj} }.

这会枚举 gc gen2 中给定类型的所有对象。

对象大小平均约为 500 KB,大约有 2000 个对象。仅此一项就增加了大约 1 GB 内存,而任务管理器中我的 asp 进程内存仅显示大约 700 MB。还有一点是我没有考虑我正在使用的其他加载对象。

此外,上述所有对象都是不会被垃圾收集的根对象。不确定此命令是否错误,或者对于 sos 返回的大小不匹配以及任务管理器中显示的内容是否有任何其他解释?

提前致谢,
巴拉特·K.


!objsize计算实例的大小,包括其所有引用的对象,因此,如果您有任何对象共享对其他对象的引用,则这些对象的大小将被多次计算。最常见的来源可能是字符串,因为文字字符串被保留,因此在使用相同文字文本的对象之间共享。但是,您可能还有引用相同对象的集合。在任何情况下,除非计数的对象根本不共享任何引用,否则总和将不正确。

考虑这个例子

class SomeType {
    private readonly string Text;

    public SomeType(string text) {
        Text = text;
    }
}

和这段代码

var st1 = new SomeType("this is a long string that will be stored only once due to interning");
var st2 = new SomeType("this is a long string that will be stored only once due to interning");

在WinDbg中

0:006> !dumpheap -type Some
 Address       MT     Size
00ceb44c 00b738a8       12     
00ceb458 00b738a8       12     

0:006> !objsize 00ceb44c
sizeof(00ceb44c) =          164 (        0xa4) bytes (TestApp.SomeType)
0:006> !objsize 00ceb458
sizeof(00ceb458) =          164 (        0xa4) bytes (TestApp.SomeType)

0:006> !DumpObj 00ceb44c
Name:        TestApp.SomeType
MethodTable: 00b738a8
EEClass:     00b714bc
Size:        12(0xc) bytes
File:        c:\dev2010\FSharpLib\TestApp\bin\Release\TestApp.exe
Fields:
      MT    Field   Offset                 Type VT     Attr    Value Name
79b9d2b8  4000001        4        System.String  0 instance 00ceb390 Text
0:006> !DumpObj 00ceb458
Name:        TestApp.SomeType
MethodTable: 00b738a8
EEClass:     00b714bc
Size:        12(0xc) bytes
File:        c:\dev2010\FSharpLib\TestApp\bin\Release\TestApp.exe
Fields:
      MT    Field   Offset                 Type VT     Attr    Value Name
79b9d2b8  4000001        4        System.String  0 instance 00ceb390 Text

从输出中可以看到!dumpobj,它们都共享相同的参考,因此如果您将报告的大小相加!objsize上面,字符串被计算了两次。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

sos.dll 返回的对象大小与内存中进程大小不匹配 的相关文章

随机推荐

  • 在 android 中从 Shoutcast Url 播放

    我正在开发一个需要播放 Shoutcast 广播的应用程序 对于API我已经遵循了这个URL http wiki winamp com wiki SHOUTcast Radio Directory API 我成功地使用我的开发者 ID 获取
  • 在 CUDA 中使用 SIMD 实现位旋转运算符

    我知道 StackOverflow 不是用来向其他人询问代码的 但让我说一下 我正在尝试在 CUDA C 设备代码中实现一些 AES 函数 在尝试实现左字节旋转运算符时 我很不安地发现没有原生 SIMD 内在功能 所以我开始了一个幼稚的实现
  • 会计和数据库设计,存储借方和贷方金额

    问题 在下面的情况下 我是否应该将所有金额存储为正小数金额 然后将该金额标记为 借方 或 贷方 而不是将借方存储为负金额 将贷方存储为正金额 在我的数据库设计中 我将 借方 存储为负金额 将贷方存储为正金额 现在 在报告中有时结果会出错 因
  • 附件动作序列(UITableViewController)

    我正在尝试通过 IB 进行 segue 当按下 tableView 中的单元格附件时切换视图 来自我的IB的图片 1 我从 tableviewcontroller 的单元格拖动到另一个视图并选择 Accessory Action gt Pu
  • 如何使用 InvokeCommandAction 调用我的方法并传入参数?

    我一直在试图弄清楚如何从Loaded 事件 我在这里问了一个问题 我将如何在 Loaded 上传递参数 https stackoverflow com questions 30488770 how would i go about pass
  • 如何通过代码判断iPad是黑色还是白色? [复制]

    这个问题在这里已经有答案了 我想知道是否有办法通过代码判断 iPad 是黑色还是白色 简单的谷歌搜索没有发现任何结果 iPhone 上的序列号为您提供了所有这些信息 您只需将颜色代码映射到颜色本身即可 iPhone SN 的典型格式如下 A
  • UIButton 将点击和滚动手势传递给 UIScrollView

    我有一个水平分页的UIScrollView with a UIButton部分覆盖滚动视图 像这样 UIView UIScrollView UIButton 我想做UIButton不触发点击按钮上方滚动并释放 我想要UIScrollView
  • Python(TKinter)中形状的随机填充颜色

    我想知道如何从列表中获取随机颜色以在draw rectangle colors red orange yellow green blue violet canvas create rectangle self x self y self x
  • redux-toolkit createSlice 可以使用 js Map 作为状态吗?

    一般来说 使用可变对象 例如Map is 强烈劝阻 https redux js org faq organizing state can i put functions promises or other non serializable
  • 在 Selenium 中每个元素使用多个定位器的优点/缺点?

    我正在测试一个仍在开发中的网站 通常 元素的 id 类 文本或 DOM 中的位置会发生变化 然后我一直使用的定位器将不再能够找到该元素 但这些功能仍然可以正常运行 我不希望在没有实际回归的情况下多次测试失败 因此 我没有为每个元素使用单个定
  • CSS 页脚基于最小高度固定位置

    我看过这里和各种教程 但无法达到我需要的效果 因此 如果页面内容高度低于 600 像素 我希望页脚固定在该高度的容器下方 但是 如果内容将容器高度增加到超过 600 像素 则页脚应被容器向下推到页面上 我尝试使用 min height 来使
  • 根据一列将一张表拆分为多个表[重复]

    这个问题在这里已经有答案了 给定一个表 dataFrame x name day earnings revenue Oliver 1 100 44 Oliver 2 200 69 John 1 144 11 John 2 415 54 Jo
  • 即使我使用 -ldl 链接,Cmake 也未定义对符号 'dlsym@@GLIBC_2.2.5 的引用

    我收到未定义的引用dlsym GLIBC 2 2 5即使在库之前和之后链接它之后也是如此 然而 在链接输出中 它似乎是在之前链接的 但我想在所有库之前链接应该有效 bin g 9 CMakeFiles http downloader dir
  • 我该如何解决这个问题?我无法编译我的 flutter web

    我该如何解决这个问题 颤动构建网络 具有良好零安全性的建筑 目标 dart2js 失败 异常 警告 dart2js 入口点脚本已弃用 请使用 dart 编译 js 反而 C Users DELL AppData Local Pub Cach
  • TestNG - 在测试类之间共享状态

    我有一个testng questions tagged testng我通过 testng xml 文件运行的测试类套件 这很好用 所有测试都是串行运行的 因此不存在并行执行障碍 我现在的目标是获取一个测试类中的测试方法生成的状态 例如 cu
  • 为什么我的视图的列可以为空?

    我在 Windows 上运行 PostgreSQL 9 2 我有一个现有的表 其中包含一些不可为空的列 CREATE TABLE testtable bkid serial NOT NULL bklabel character varyin
  • Rails heroku 无效配置选项

    当我部署到heroku并运行时heroku run rake db migrate我收到错误 ArgumentError invalid configuration option aws access key id 配置 初始化程序 aws
  • 如何使用已删除的私钥停止 SSH 工作

    在 Ubuntu 14 04 上 我有一个私钥 ssh id rsa 我已经在我想要连接的服务器上安装了公钥 实际上 当我运行以下命令时 我确实按预期连接 ssh email protected cdn cgi l email protec
  • SQL Server 表:@、# 和 ## 之间有什么区别?

    在SQL Server中 表 表和 表有什么区别 table指本地 仅创建它的用户可见 临时表 table指全局 所有用户可见 临时表 variableName指的是可以根据其类型保存值的变量
  • sos.dll 返回的对象大小与内存中进程大小不匹配

    我使用以下 sos 命令来枚举正在运行的 asp 应用程序 托管在 Windows xp 4 GB 计算机上 中特定类型的所有实例 foreach obj dumpheap type my type short start of addre