【发布时间】:2025-12-04 15:50:01
【问题描述】:
一个进程的内存使用包括(可以称为VirtualMemory):
- PrivateMemory:专用于一个进程,不能被其他进程共享。
- SharedMemory:运行时或第三个链接库。
- CommitedMemory [或 PagedMemory]:映射到硬盘。 (准备使用)
- ReservedMemory:仅声明(不存在且无地址)。
这是我的理解:
Virtual Memory = PrivateMemmory + SharedMemory + CommitedMemory + ReservedMemory;
WorkSet Memory = PrivateMemmory + SharedMemory + CommitedMemory;
Free Memory = 'Virtual Memory' - 'WorkSet Memory';
我计算用 c# 编写的进程的总使用内存(不包括保留的)。左边是VMMap,右边是VS Monitor。
进程总内存大小约为5GB,VMMap中保留内存约为4GB,VS Monitor显示VirtualMemorySize64约为5GB,我很困惑如何获得总使用内存。 VMMap 中有 4GB 的预留内存,如何使用 .net Process 类获取预留内存。
我用下面的代码设置了 TotalUsageMemory 值,对吗?
Int64 TotalUsageMemory = proc.WorkingSet64 + proc.PagedMemorySize64;
【问题讨论】:
-
您的问题是什么? “我用下面的代码设置了 CurrentMemory 值,是否更正了?”或者为什么你有这么多内存使用?
-
不,这很荒谬,你会计算两次相同的内存。在像 Windows 这样的按需页面虚拟内存操作系统上,“内存”这个词太模糊了。追求 VMMap 编号并不是很有用,其中有一堆由所有进程共享,因此不能完全代表您放在机器上的“负载”。 Process.PrivateMemorySize64 是一个不错的衡量标准。
-
@podosta 我更新了这个问题。我想获取一个进程的总使用内存(有内存地址,只声明没有地址的保留内存),VMMap 有 4GB 的保留内存,但是 .net Process 类只告诉我虚拟内存,工作集内存、私有内存、分页内存。