我有一个类,我想检查它的字段并最终报告每个字段占用的字节数.我假设所有字段都是Int32,byte等类型.
如何轻松找出该字段占用的字节数?
我需要这样的东西:
Int32 a;
// int a_size = a.GetSizeInBytes;
// a_size should be 4
Run Code Online (Sandbox Code Playgroud) 我正在尝试在vb.net应用程序中加载Visual Studio 2010(.Net framework 4)中的SOS扩展,但没有成功.
首先,我发现以下文章建议我在immidiate窗口中键入"!load sos ".它导致以下错误消息:
Error during command: extension C:\Windows\Microsoft.NET\Framework64\v4.0.30319\sos.dll could not load (error 193)
Run Code Online (Sandbox Code Playgroud)
接下来我发现了一篇建议.loadby sos clr的文章.这给了我以下错误:
Method arguments must be enclosed in parentheses.
Run Code Online (Sandbox Code Playgroud)
我该如何加载它?
我正在序列化,一个 MultiDictionary<String,Object>
http://powercollections.codeplex.com/给json.
它有618个元素,其中元素是深层嵌套的,即单个Object可能有几个类似于字典的对象.我正在使用JSON.Net
String json = JsonConvert.SerializeObject(json, Newtonsoft.Json.Formatting.Indented);
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
更多信息: - 这是正常工作,直到我使用动态,我不得不切换到MultiDictionary允许同名的多个属性.它适用于大多数情况,只有当项目数量很大时才会中断.
更新: -
我已经能够控制内存消耗,但减少了一些递归添加到每个元素的元素.
不确定是否可能,但我很好奇,到目前为止我还没有找到任何运气.我想知道是否有人知道从VS监视窗口中确定内存中对象大小的方法.显然,一个分析器可以做到这一点,但只是从VS中获取这个快速快照是非常方便的.这可能吗?
我不知道是否有在C#/.NET和/或Visual Studio一个简单的命令或指令:能告诉我有多少内存的单个对象是占用了?我有一个鬼鬼祟祟的怀疑,的sizeof()运算符是要骗我...我在这个信念是否合理?
有一个有点相关的问题在这里,但没有明确的答案是如何衡量的单个对象给出
有没有办法说出类似的话:
的sizeof(类型)?还是打字.大小?
现在我正在使用如下代码:
if (type.Equals(typeof(int)))
return sizeof(int);
else if (type.Equals(typeof(long)))
return sizeof(long);
Run Code Online (Sandbox Code Playgroud)
等等,适用于每种数据类型.
必须有一个更清洁的解决方案,不是吗?
我将拥有一些MyClass类的数千万个实例,并希望最小化其内存大小.在查找.net对象的大小时讨论了测量对象在内存中占用多少空间的问题 我决定遵循Jon Skeet的建议,这是我的代码:
// Edit: This line is "dangerous and foolish" :-)
// (However, commenting it does not change the result)
// [StructLayout(LayoutKind.Sequential, Pack = 1)]
public class MyClass
{
public bool isit;
public MyClass nextRight;
public MyClass nextDown;
}
class Program
{
static void Main(string[] args)
{
var a1 = new MyClass(); //to prevent JIT code mangling the result (Skeet)
var before = GC.GetTotalMemory(true);
MyClass[] arr = new MyClass[10000];
for (int i = 0; i < 10000; …Run Code Online (Sandbox Code Playgroud) 我目前在ASP.NET HttpRuntime.Cache中存储了许多不同类型的对象,我想知道是否有办法弄清楚每个对象有多大?
.net中堆分配对象的大小是多少,包括管理开销?我假设对象是沿着4字节边界分配的,还是使用了不同的方法?
class Node
{
byte[][] a;
int[] b;
List<Node> c;
public Node()
{
a = new byte[3][];
b = new int[3];
c = new List<Node>(0);
}
}