C#>我的班级使用多少内存实例-务实的答案' />构造函数调用后,下一个类的实例有多大?我想这通常可以写成size = nx c,其中x = 4在x86中,在x64中x = 8. n =? c =? .NET中是否有一些方法可以返回此数字?类节点{ byte [] [] a; int [] b; 列表节点...
>构造函数调用后,下一个类的实例有多大?
我想这通常可以写成size = nx c,其中x = 4
在x86中,在x64中x = 8. n =? c =?
> .NET中是否有一些方法可以返回此数字?
类节点
{
byte [] [] a;
int [] b;
列表<节点> C;
公共Node()
{
a =新字节[3] [];
b =新的int [3];
c =新的List<节点>(0);
}
}
解决方法:
首先,这取决于该程序的编译和运行环境,但是,如果您修复了一些变量,则可以得到很好的猜测.
2)的答案为“否”,没有任何函数可以为作为参数的任何对象提供您要求的答案.
在解决1)中,您有两种方法:
>尝试执行一些测试以找出答案
>分析对象并进行数学运算
测试方法
首先看看这些:
> what-is-the-memory-overhead-of-a-net-object
> Overhead of a .NET array?
> C# List size vs double[] size
您需要的方法是这样的:
const int Size = 100000;
private static void InstanceOverheadTest()
{
object[] array = new object[Size];
long initialMemory = GC.GetTotalMemory(true);
for (int i = 0; i < Size; i++)
{
array[i] = new Node();
}
long finalMemory = GC.GetTotalMemory(true);
GC.KeepAlive(array);
long total = finalMemory - initialMemory;
Console.WriteLine("Measured size of each element: {0:0.000} bytes",
((double)total) / Size);
}
在我的Windows 7计算机上,VS 2012,.NET 4.5,x86(32位)结果是96.000.当更改为x64时,结果为176.000.
做数学方法
做数学方法可以写成一个可以给您结果的函数,但是它特定于您的Node类,并且仅在对对象执行其他操作之前有效.还要注意,这是在32位程序中进行的,并且还请注意,此数字可以随框架实现和版本而改变.这只是一个示例,如果对象足够简单,如何在某个时刻可以对对象的大小给出很好的猜测.数组和列表开销常量取自Overhead of a .NET array?和C# List size vs double[] size
public const int PointerSize32 = 4;
public const int ValueArrayOverhead32 = 12;
public const int RefArrayOverhead32 = 16;
public const int ListOverhead32 = 32;
private static int instanceOverheadAssume32()
{
int sa = RefArrayOverhead32 + 3 * PointerSize32;
int sb = ValueArrayOverhead32 + 3 * sizeof(int);
int sc = ListOverhead32;
return 3 * PointerSize32 + sa + sb + sc;
}
这也将返回96,因此我认为该方法是正确的.
本文标题为:首页> C#>我的班级使用多少内存实例-务实的答案
基础教程推荐
- UnityShader3实现转圈与冷却效果 2023-01-16
- 基于C#调用c++Dll结构体数组指针的问题详解 2022-12-01
- WPF如何自定义ProgressBar滚动条样式 2023-01-22
- c# – 等待HttpWebRequest.BeginGetResponse在Windows Phone 7中完成 2023-09-19
- Unity3D Shader实现贴图切换效果 2023-01-16
- 一、netcore跨平台之 Linux上部署netcore和webapi 2023-09-27
- 图形学之Unity渲染管线流程分析 2023-05-12
- C#使用读写锁解决多线程并发问题 2023-05-31
- WPF弹出右键菜单时判断鼠标是否选中该项 2023-06-15
- C#实现Excel转PDF时设置内容适应页面宽度 2023-05-26