class Program
{
static void Main(string[] args)
{
//Memory usage 7.1 MB
Console.WriteLine("Hit enter to allocate");
Console.ReadKey();
byte[] data = new byte[1024*1024]; //Memory still 7.1 MB
Console.WriteLine("Hit Enter to Fill with zeros!");
Console.ReadKey();
Array.Clear(data, 0, data.Length); //Memory now 8.1 MB
Console.WriteLine("1MB filled, hit enter to exit");
Console.ReadKey();
}
}
3 回答
好吧,如果你真的想要映射所有内存,那么重复数组并用零填充它 . 无论如何,这是线性时间 . 使用
Array.Clear
. C#真的不是为了这样的内存优化而做的 . 您应该关注的唯一资源是没有损坏的资源 . 在C#中考虑其余内存消耗的正确方法并没有考虑到它 . 老实说我不知道C#在数组声明中如何处理内存分配,并且's kinda the point, I'm没有使用高级抽象语言来关心这些东西 . 只有当你有一个遇到内存瓶颈的工作应用程序而你需要进行优化时才有意义 .有一个stackalloc operator,您可以弯曲使用,但它是一个不安全的操作员 . 还有GC.GetTotalMemory(),它可以显示当前的内存使用情况(托管对象),Microsoft.VisualBasic.Devices.ComputerInfo.TotalPhysicalMemory可以显示机器的总RAM(请't mind the VB in the name, it' sa .NET Framework方法,只需添加对_1690811的引用),所以使用如果有足够的内存供您分配阵列,那么您可以实现更多或更少知道的目标 .
如果您希望它分配所有字节,您可以使用Array.Clear,它将使用0填充所有值
这个简单的控制台应用程序允许您监视内存使用情况,因为它已创建并使用clear填充
制作了一个函数,它将尝试实际分配我指定的内存(如果不可能则抛出异常而不是谎言),如果成功,将立即由垃圾收集器收集 .