使用C#应用程序。
如果应用程序长时间打开,任务管理器中的应用程序内存使用量会持续增长。
在深入探讨内存泄漏和优化内存使用之前,我想限制损坏(因为此任务需要花费很多时间)。
我实现了以下逻辑:
如果Process.GetCurrentProcess().PrivateMemorySize64
大于系统总物理内存大小的25%,或者系统剩余可用内存小于10%,则重启我的应用程序。
要获得我使用new ComputerInfo().TotalPhysicalMemory
的总体系统物理内存大小(这在我的笔记本电脑上返回16GB是正确的)
但是我注意到另一个内存类型是虚拟内存new ComputerInfo().TotalVirtualMemory
。这是返回2GB。
研究告诉我,虚拟内存是一个应用程序可以使用的内存区域,而不必担心影响其他应用程序。
这让我想到了我的问题:
虚拟内存可以被认为是可靠的,只要我的应用程序没有超过它,我很好吗?
修改逻辑以检查虚拟内存而不是物理内存是否合乎逻辑?如果应用程序虚拟内存>系统虚拟内存我重新启动应用程序。
注意:我知道这不是正确的方法,但在优化应用程序并查找内存泄漏之前,我想重新启动应用程序,只要它在系统中作为一个坏公民行为
由于
答案 0 :(得分:0)
您似乎对虚拟内存的工作方式存在误解。
研究告诉我,虚拟内存是一个应用程序可以使用的内存区域,而不必担心影响其他应用程序。
虚拟(或逻辑)地址空间中存在进程。在虚拟地址页面内,虚拟页面要么(1)被映射到二级存储器; (2)映射到物理页面帧;或(3)根本没有映射(即无效)。
虚拟内存可以被认为是可靠的,只要我的应用程序没有超过它,我很好吗?
您无法超越虚拟内存的限制。您希望在到达虚拟内存末尾之前达到其他限制(例如,页面文件空间,进程配额,系统参数)。