限制内存消耗。物理Vs虚拟内存

时间:2016-12-07 16:24:21

标签: c# memory-management ram virtual-memory

使用C#应用程序。

如果应用程序长时间打开,任务管理器中的应用程序内存使用量会持续增长。

在深入探讨内存泄漏和优化内存使用之前,我想限制损坏(因为此任务需要花费很多时间)。

我实现了以下逻辑:

如果Process.GetCurrentProcess().PrivateMemorySize64大于系统总物理内存大小的25%,或者系统剩余可用内存小于10%,则重启我的应用程序。

要获得我使用new ComputerInfo().TotalPhysicalMemory的总体系统物理内存大小(这在我的笔记本电脑上返回16GB是正确的)

但是我注意到另一个内存类型是虚拟内存new ComputerInfo().TotalVirtualMemory。这是返回2GB。

研究告诉我,虚拟内存是一个应用程序可以使用的内存区域,而不必担心影响其他应用程序。

这让我想到了我的问题:

虚拟内存可以被认为是可靠的,只要我的应用程序没有超过它,我很好吗?

修改逻辑以检查虚拟内存而不是物理内存是否合乎逻辑?如果应用程序虚拟内存>系统虚拟内存我重新启动应用程序。

注意:我知道这不是正确的方法,但在优化应用程序并查找内存泄漏之前,我想重新启动应用程序,只要它在系统中作为一个坏公民行为

由于

1 个答案:

答案 0 :(得分:0)

您似乎对虚拟内存的工作方式存在误解。

  

研究告诉我,虚拟内存是一个应用程序可以使用的内存区域,而不必担心影响其他应用程序。

虚拟(或逻辑)地址空间中存在进程。在虚拟地址页面内,虚拟页面要么(1)被映射到二级存储器; (2)映射到物理页面帧;或(3)根本没有映射(即无效)。

  

虚拟内存可以被认为是可靠的,只要我的应用程序没有超过它,我很好吗?

您无法超越虚拟内存的限制。您希望在到达虚拟内存末尾之前达到其他限制(例如,页面文件空间,进程配额,系统参数)。