|
|
1
10
你所拥有的不是一个“复杂对象”,而是一个对象图。要确定它的总大小,您需要遍历该图—从一些根对象开始,并使用反射来枚举引用类型的字段并检索它们的值(当然,还要检查循环)。 要获取图形中特定对象的大小,请参见 this answer to a related question 但请注意,这是一个邪恶的黑客,完全不受支持,可能会打破(并可能已经被打破),并可能导致大规模的猫科动物灭绝在天堂。也就是说,没有“非黑客”方法可以获得精确的值,因为根据定义,这是一个实现细节——您不应该使用它。为了在调试/分析过程中了解应用程序的内存使用情况,黑客技术已经足够好了。 |
|
|
2
4
简而言之,没有办法知道。假设所有对象都是可序列化的,可以使用BinaryFormatter将它们序列化为二进制blob,然后读取其大小。但是,这将包括一些元数据,并膨胀实际的对象大小(但这将是一个合理的估计)。
对于值类型,您将使用
反射是另一种方式,但不会暴露占用内存的任何私有成员。所以,除非我弄错了,否则没有办法真正做到这一点。 |
|
|
3
2
狡猾的… 如果两个对象指向同一个字符串变量该怎么办?哪一个“拥有”了这根绳子?在我看来,你需要模拟垃圾收集来得到一个真正的答案。不是很轻。 |
|
4
1
给予
|
|
|
5
1
先前在StackOverflow上的其他地方回答: Find size of object instance in bytes in c# 您需要引入不安全的代码(由于这需要指针操作)-代码如下所示:
还请记住将项目设置(项目->生成选项卡)标记为“允许不安全代码”。 |
|
|
A B · C#Excel自动调整列避免长文本时出错 1 年前 |
|
|
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 1 年前 |
|
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 1 年前 |
|
|
Sei · Avalonia/WPF将路由器传递到控制模板 1 年前 |