MeasureSize.cs

Get the Amount of Available Memory for Allocation

Updated: Dec-26,2020

using System;
public class MeasureSize<T>
{
    private const int   NumberOfInstances = 100000;
    private       T[][] _memArray;
    public MeasureSize()
    {
        _memArray = new T[NumberOfInstances][];
    }
    public long GetByteSize()
    {
        var oldSize = GC.GetTotalMemory(true);
        for (var i = 0; i < NumberOfInstances; i++)
            _memArray[i] = new T[1];
        var newSize = GC.GetTotalMemory(true);
        GC.KeepAlive(_memArray);
        if (oldSize > newSize)
            return GetByteSize();
        return (newSize - oldSize) / NumberOfInstances;
    }
    public long GetByteSize(int size)
    {
        _memArray = new T[size][];
        var oldSize = GC.GetTotalMemory(true);
        for (var i = 0; i < size; i++)
            _memArray[i] = new T[1];
        var newSize = GC.GetTotalMemory(true);
        GC.KeepAlive(_memArray);
        if (oldSize > newSize)
            return GetByteSize(size);
        return (newSize - oldSize) / size;
    }
}