对于任何任意实例(不同对象,组合,单个对象等的集合)
如何确定其大小(以字节为单位)?
(我现在有各种对象的集合,我正在尝试确定它的聚合大小)
编辑:有人写了一个可以做到这一点的对象的扩展方法吗?那个非常整洁的imo.
有没有人知道找出一个对象实例占用多少内存的方法?
例如,如果我有以下对象的实例:
TestClass tc = new TestClass();
Run Code Online (Sandbox Code Playgroud)
有没有办法找出实例tc要占用多少内存?
之所以要求是,尽管C#有内置的内存管理,我经常碰到的问题有没有清除的对象的实例(例如,保持的东西轨道列表).
有几个相当不错的内存分析器(如蚂蚁探查),但在多线程环境中是非常难以找出所属的地方,即使有这些工具.
我不知道是否有在C#/.NET和/或Visual Studio一个简单的命令或指令:能告诉我有多少内存的单个对象是占用了?我有一个鬼鬼祟祟的怀疑,的sizeof()运算符是要骗我...我在这个信念是否合理?
有一个有点相关的问题在这里,但没有明确的答案是如何衡量的单个对象给出
有没有办法以编程方式准确地确定c#中对象使用的内存量?我不关心这个过程有多慢,所以左右运行GC是可以接受的(当然我更喜欢更高效的东西).
序列化对象并查看结果长度似乎不太准确(在这个方法的简单测试中,我看到一个整数返回值为54).
使用GC.GetTotalMemory(true)似乎产生不一致的值,更不用说它们看起来太大了.
使用Marshal.SizeOf(object)产生准确的结果,但似乎只适用于基元.
如果这些行中没有任何内容可用,则可以选择根据所使用的结构和所涉及的原语来计算大小.这也是可以接受的(虽然令人不安),但我需要知道计算对象开销等的正确方法.任何能够向我展示这种方法的文献都会很棒.
类似的SO问题(其中没有一个似乎具有准确计算对象大小的具体方法):
配置内存的工具(非程序化方法):
http://www.microsoft.com/en-us/download/details.aspx?id=16273
可能有5或6个SO帖子切向触及这个,但没有一个真正回答这个问题.
我有一个Dictionary对象,我使用一种缓存来存储值.问题是我不知道它有多大 - 随着时间的推移它可能会变得越来越大,但我无法分辨,所以我无法衡量它的有效性,或者对用户如何使用该软件做出结论.因为这是一个将在很长一段时间内投入生产并监控某些东西的部分,所以连接内存分析器或任何类似的调试都没有意义.
理想情况下,我只需在我的Timer中调用一个类似于:
private void someTimer_Tick(object sender, EventArgs e)
{
...
float mbMem = cacheMap.GetMemorySize();
RecordInLog(DateTime.Now.ToString() + ": mbMem is using " + mbMem.ToString() + "MB of memory");
...
}
Run Code Online (Sandbox Code Playgroud)
这可以在不附加某些调试工具的情况下完成,以便可以使用部署方案吗?
我正在用.NET 4.0 C#编写一个应用程序.我将对象放在.net httpruntime缓存中,并希望在其上生成一些统计信息.我想知道对象在放入缓存之前的大小以及它在缓存中的大小.我该怎么测量呢?它是否在放入缓存时被序列化,如果是,那么使用什么类型的序列化?