This question already has answers here:
How to measure the total memory consumption of the current process programmatically in .NET?
(4个答案)
7年前关闭。
我正在尝试在C#程序中测量内存使用情况。
我想知道这个Java函数的C#等效项:
代表为堆分配的的总内存。我需要此信息才能知道为C#程序分配的内存总大小。
然后在Java中,我可以通过以下方式获得使用的内存:
目前,我在C#中使用它来获取已使用的内存:
但是我不能完全确定是否等同。
因此,在简历中,如何在时间t处获取C#应用程序的总分配空间和当前使用空间?
编辑:
从答案和进一步的研究中,我确定了这一点:
当前正在使用的内存
该方法返回一个低值,我可以确定它并不是使用中的所有内存的真实表示,因为我可以使用Java中的
看起来 :
或者
提供所有正在使用的内存的更准确的值。但我不知道该用哪一种...
对于全局分配的内存, this article建议使用:
它在程序中返回的值始终与始终相同,与Java相比大约为169MB,这似乎是公平的:最大64MB至170MB
我仍在寻找一个准确的答案,我发现所有内容都非常模糊,并且我对Windows内存管理不是很熟悉,我不确定要理解我发现的文档:/
(4个答案)
7年前关闭。
我正在尝试在C#程序中测量内存使用情况。
我想知道这个Java函数的C#等效项:
ManagementFactory.getMemoryMXBean().getHeapMemoryUsage().getCommitted()
代表为堆分配的的总内存。我需要此信息才能知道为C#程序分配的内存总大小。
然后在Java中,我可以通过以下方式获得使用的内存:
ManagementFactory.getMemoryMXBean().getHeapMemoryUsage().getUsed()
目前,我在C#中使用它来获取已使用的内存:
Process_Memory = MyProcess.PrivateMemorySize64;
但是我不能完全确定是否等同。
因此,在简历中,如何在时间t处获取C#应用程序的总分配空间和当前使用空间?
编辑:
从答案和进一步的研究中,我确定了这一点:
当前正在使用的内存
System.GC.GetTotalMemory(false);
该方法返回一个低值,我可以确定它并不是使用中的所有内存的真实表示,因为我可以使用Java中的
getUsed()
获得。在同一应用程序的Java中,使用的内存从5MB开始,最大为125MB。使用C#,使用上述方法可以获得1到5 MB的内存。看起来 :
MyProcess.PrivateMemorySize64; // return ~=25MB
或者
MyProcess.WorkingSet64; //return ~=20MB
提供所有正在使用的内存的更准确的值。但我不知道该用哪一种...
对于全局分配的内存, this article建议使用:
Process_MemoryEnd1 = MyProcess.VirtualMemorySize64;
它在程序中返回的值始终与始终相同,与Java相比大约为169MB,这似乎是公平的:最大64MB至170MB
我仍在寻找一个准确的答案,我发现所有内容都非常模糊,并且我对Windows内存管理不是很熟悉,我不确定要理解我发现的文档:/
最佳答案
GC
静态类提供所有此类信息。
您大概在GC.GetTotalMemory()
之后。
编辑:
我相信,尝试根据当前 Root 的对象来锻炼您的内存占用量。
如果您要为进程分配的总大小(即包括可用缓冲区),请使用Process
类。例如。:
Process.GetCurrentProcess().WorkingSet64;
关于c# - 如何使用C#来衡量内存使用情况(就像我们在Java中那样)? [复制],我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9404946/