-1

我们有 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 配置文件来获取有关内存的详细信息,但我确实需要示例代码来在我的应用程序中实现。

非常感谢。

4

1 回答 1

0

获取有关处理器、操作系统等的信息:

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();

            }
        }
    }
}

来源

于 2013-07-25T17:11:59.547 回答