在C#中获取进程内存分配(内存中的对象)的详细信息
本文关键字:内存 对象 详细信息 取进程 分配 获取 | 更新日期: 2023-09-27 18:25:06
我们有C#.Net windows应用程序,我需要从该应用程序跟踪当前运行进程的内存和CPU使用情况的详细信息。我尝试了下面提到的代码来获取内存的详细信息。
Process curProcess=Process.GetCurrentProcess();
Console.Writeline(curProcess.PrivateMemorySize64);
Console.Writeline(curProcess.VirtualMemorySize64);
Console.Writeline(curProcess.PagedMemorySize64);
Console.Writeline(curProcess.NonpagedSystemMemorySize64);
var counter = new PerformanceCounter("Process", "Working Set - Private", Process.GetCurrentProcess().ProcessName);
Console.Writeline(curProcess.PagedMemorySize64);
Console.Writeline(counter.RawValue);
以上所有代码都给出了整个过程的内存细节,但我的要求是获得以下细节,
- 存储器中的对象的列表以及相应对象的存储器分配
- 垃圾收集器收集的内存量
- 未处理对象计数及其名称
处理线程及其关系。
请寄给我一些代码样本以满足我的要求。
注意:我尝试了CLR概要文件和ANTS概要文件来获得有关内存的详细信息,但我确实需要在应用程序中实现示例代码。
非常感谢。
用于获取有关处理器、操作系统等的信息:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Management;
namespace HaardDiskInfoCSharp
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
ManagementObjectSearcher mosProcessor = new ManagementObjectSearcher("SELECT * FROM Win32_Processor");
foreach (ManagementObject moProcessor in mosProcessor.Get())
{
if(moProcessor["maxclockspeed"]!=null)
lblPMCSpeed.Text = moProcessor["maxclockspeed"].ToString();
if(moProcessor["datawidth"]!=null)
lblPDataWidth.Text = moProcessor["datawidth"].ToString();
if(moProcessor["name"]!=null)
lblPName.Text=moProcessor["name"].ToString();
if(moProcessor["manufacturer"]!=null)
lblPManufacture.Text = moProcessor["manufacturer"].ToString();
}
}
}
}
来源。