สำหรับใครก็ตามที่กำลังมองหาวิธีแก้ปัญหาที่ไม่ต้อง[Serializable]เรียนและผลลัพธ์คือการประมาณแทนที่จะเป็นวิทยาศาสตร์ที่แน่นอน วิธีที่ดีที่สุดที่ฉันสามารถหาได้คือ json serialization ใน memorystream โดยใช้การเข้ารหัส UTF32
private static long? GetSizeOfObjectInBytes(object item)
{
if (item == null) return 0;
try
{
// hackish solution to get an approximation of the size
var jsonSerializerSettings = new JsonSerializerSettings
{
DateFormatHandling = DateFormatHandling.IsoDateFormat,
DateTimeZoneHandling = DateTimeZoneHandling.Utc,
MaxDepth = 10,
ReferenceLoopHandling = ReferenceLoopHandling.Ignore
};
var formatter = new JsonMediaTypeFormatter { SerializerSettings = jsonSerializerSettings };
using (var stream = new MemoryStream()) {
formatter.WriteToStream(item.GetType(), item, stream, Encoding.UTF32);
return stream.Length / 4; // 32 bits per character = 4 bytes per character
}
}
catch (Exception)
{
return null;
}
}
ไม่นี่จะไม่ให้ขนาดที่แน่นอนที่จะใช้ในหน่วยความจำ ดังที่เคยกล่าวไว้ว่าเป็นไปไม่ได้ แต่จะให้การประมาณค่าคร่าวๆ
โปรดทราบว่าสิ่งนี้ค่อนข้างช้า