privateworkingset(内存)如何计算?如何使用C#计算私有内存工作集?我有兴趣生成与taskmgr.exe大致相同的数字。我正在使用Process命名空间并使用WorkingSet64和PrivateMemorySize64等方法/数据,但数字有时会下降100MB或更多。这是一个高度可变的数字,您无法计算它。Windows内存管理器不断地将页面交换到RAM中。TaskMgr.exe从性能计数器中获取它。您可以像这样获得相同的号码:usingSystem;使用系统诊断;类程序{staticvoidMain(string[]args){stringprcName=Process.GetCurrentProcess().ProcessName;varcounter=newPerformanceCounter("Process","WorkingSet-Private",prcName);Console.WriteLine("{0}K",counter.RawValue/1024);控制台.ReadLine();请注意,当其他进程启动并竞争RAM时,这个数字并不意味着任何东西。对于未来的用户,我所要做的就是确保为一个可能有多个实例的进程获得一个私有工作集。我调用CurrentMemoryUsage,它从GetNameToUseForMemory获取适当的进程名称。我发现这个循环很慢,即使我尽可能地过滤掉结果也是如此。这就是为什么您会看到GetNameToUseForMemory使用字典来缓存名称。privatestaticlongCurrentMemoryUsage(Processproc){longcurrentMemoryUsage;varnameToUseForMemory=GetNameToUseForMemory(proc);using(varprocPerfCounter=newPerformanceCounter("Process","WorkingSet-Private",nameToUseForMemory)){//KB是标准的currentMemoryUsage=procPerfCounter.RawValue/1024;}返回当前内存使用情况;}privatestaticstringGetNameToUseForMemory(Processproc){if(processId2MemoryProcessName.ContainsKey(proc.Id))returnprocessId2MemoryProcessName[proc.Id];varnameToUseForMemory=String.Empty;varcategory=newPerformanceCounterCategory("进程");varinstanceNames=category.GetInstanceNames().Where(x=>x.Contains(proc.ProcessName));foreach(varinstanceNameininstanceNames){using(varperformanceCounter=newPerformanceCounter("Process","IDProcess",instanceName,true)){if(performanceCounter.RawValue!=proc.Id)继续;nameToUseForMemory=instanceName;休息;}}如果(!processId2MemoryProcessName.ContainsKey(proc.Id))processId2MemoryProcessName.Add(proc.Id,nameToUseForMemory);返回名称ToUseForMemory;也许GC.GetTotalMemory会提供你需要的数据?以上是C#学习教程:如何计算私有工作集(内存)?分享的所有内容,如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如有转载请注明出处:
