确定变量使用的字节数

Jon*_*ood 6 .net c# arrays memory-management

我有以下数组:

byte[][] A = new byte[256][];
Run Code Online (Sandbox Code Playgroud)

此数组的每个元素都引用另一个数组.

A[n] = new byte[256];
Run Code Online (Sandbox Code Playgroud)

但是,大多数元素引用相同的数组.实际上,数组A仅引用两个或三个唯一数组.

有没有一种简单的方法来确定整个事物使用多少内存?

Ani*_*Ani 5

如果您的问题是找出唯一的一维数组的数量,您可以这样做:

A.Distinct().Count()
Run Code Online (Sandbox Code Playgroud)

这应该是因为默认情况下数组的相等性在引用相等性上起作用.

但也许你正在寻找:

A.Distinct().Sum(oneDimArray => oneDimArray.Length) * sizeof(byte)
Run Code Online (Sandbox Code Playgroud)

当然,"变量使用的字节数"是一个有点不精确的术语.特别是,上面的表达式没有考虑变量的存储,A锯齿状数组中的引用,开销,对齐等.

编辑:正如Rob指出的那样,null如果锯齿状数组可以包含引用,则可能需要过滤引用.

您可以使用(unsafecontext)估计在锯齿状数组中存储引用的成本:

A.Length * sizeof(IntPtr) 
Run Code Online (Sandbox Code Playgroud)