【发布时间】:2019-05-31 15:17:30
【问题描述】:
如果我跑步
string myString = "*.txt";
Print("sizeof(char): " + sizeof(char) + " bytes");
Print("myString.Length * sizeof(char): " + (myString.Length * sizeof(char)) + " bytes");
它会打印出来
sizeof(char): 2 个字节
myString.Length * sizeof(char): 10 字节
但是,如果我将第一个答案中的代码运行到this question:
myString = "*.txt"
long size = 0;
using (Stream s = new MemoryStream())
{
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(s, myString);
size = s.Length;
}
Print("myString Serialized Size: " + size + " bytes");
我明白了
myString 序列化大小:29 字节
以下哪一项更准确地表示我的字符串在内存中占用了多少空间?
【问题讨论】:
-
您为什么不阅读答案中的cmets? “这会放更多。它添加了 DLL 名称和版本,......这不是计算对象大小的方法。”
-
两者都没有告诉您在内存中保存字符串数据实际需要多少内存。后者序列化一个字符串对象并告诉您序列化数据的大小(包括对象元数据,例如对象类型)。前者以字节为单位告诉您文本数据的长度,但这并不是字符串的全部信息。取第一个结果并添加 4...8 字节以获取额外的字符串长度信息(然后将结果四舍五入到 4 或 8 的下一个倍数,以考虑由于内存对齐可能导致的“浪费”)。这应该是一个不错的估计...
标签: c# performance memory memory-management stream