愚蠢的问题,但在目前正在处理的WinForms应用程序中,我希望获得内存中保存的List<[SomeObject]>
分配/使用的字节数(用于统计目的)。这可能吗?我已经通过可能的选项进行了搜索,但显然没有myList.GetTotalBytes()
方法。获取列表的字节大小<T>
6
A
回答
5
我不知道在运行时提供获取对象的大小的一个可靠的编程方法,但也有一些选项开放给你:
- 使用的工具,像CLR探查
- 使用Marshal.SizeOf()(返回对象的非托管大小)
- 序列化你的对象为二进制的近似
10
这真的取决于你的意思。您可以预测列表本身将使用多少字节 - 但这与预测有多少字节可能符合垃圾回收条件(如果该列表符合收集条件)不同。列表的
位:
- 背衬阵列(
T[]
- 到数组的引用仅列表将有权访问) - 大小(INT)
- 一个同步根(参考)
- 版本号(INT)
棘手位是决定多少算。其中每一个都很容易计算(特别是如果你知道T是一个参考类型,例如),但是你想计算清单中引用的对象?那些引用是唯一的,还是不是?
你说你想知道“出于统计目的” - 你能更精确吗?如果你能说出你真正感兴趣的内容(以及关于列表中的内容的更多信息以及是否可能有其他对同一对象的引用),我们可能会帮助更多。
4
这可能是一个完整的马,pucky答案,但我要去无路可退,并说,如果你正在做的统计比较,执行对象的二进制序列化到一个MemoryStream
,然后看它的Length
财产如:
List<string> list = new List<string>
{
"This",
"is",
"a",
"test"
};
using (Stream stream = new MemoryStream())
{
IFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream, list);
Console.WriteLine(stream.Length);
}
注意到,这可能不同版本的框架之间,改变将仅适用于单个程序中的对象图之间的比较是有用的。
相关问题
- 1. 获取数据类型字节大小
- 2. 获取3D字符的大小*阵列
- 3. 获取HTTPRequest/HTTPResponse头字节大小(以字节为单位)
- 4. 获取属性列表的大小
- 5. 获取列表视图的大小
- 6. 列表<SelectOption>最大大小
- 7. 从计划列表中获取最长子列表的大小
- 8. Java获取字体大小
- 9. 获取字体大小
- 10. 从指针数组中获取特定字节数组的大小为字节
- 11. 如何从java jdbc的结果集中获取列的字节大小?
- 12. 获取字体大小列表在Powerpoint中VBA
- 13. 如何在iOS 4.0+中获取字节大小的UIImage?
- 14. 以兆字节获取准确的文件大小?
- 15. 如何使用node.js获取图像文件的字节大小
- 16. Ruby代码获取网页的字节大小
- 17. 列表中每个节点的字符数? (在链表节点的大小)
- 18. 大小以字节
- 19. 如何获取由SQL查询返回的表的字节大小?
- 20. 获取列表<Object[]>
- 21. 从其他类获取列表的最大大小
- 22. 从std :: vector获取字节<bool>
- 23. drupal获取节点列表
- 24. GSSManager.createCredential如何获取Kerberos密钥和TGT?
- 25. 128字节的sockaddr_storage大小
- 26. NSDictionary的字节大小
- 27. Http以字节为单位获取请求包大小
- 28. 如何使用PIL获取图像大小(字节)
- 29. 查询来获取最大/最小行细节多个字段
- 30. 如何从imageview(android)获取图像大小字节
哇,那很快!谢谢4回复!不幸的是,我正在寻找一种在运行时可用的方法,并且希望不会涉及到将列表拆分并迭代每个对象。 – Shalan 2009-11-29 22:27:48
错过了CLR Profiler的提及。以前从未使用过,但感谢 - 即时阅读更多关于使用它! – Shalan 2009-12-02 01:27:50