You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在远程计算机上分析C#应用程序的内存使用情况?

远程分析C#(.NET)应用内存使用的可行方案

问题背景

我开发的C#应用在客户现场内存占用每日增长约100MB,抓取转储文件后发现,总大小超过1GB的转储中仅约13MB由.NET可访问对象占用。尝试用Visual Studio的VSDiagnostics.exe在客户机上做运行时诊断,但复制工具后缺少内存分析所需的代理配置,无法正常使用。

以下是几种无需依赖Visual Studio完整安装的远程内存分析方案:

1. 使用.NET官方命令行诊断工具

这些工具属于.NET SDK生态,轻量且无需Visual Studio:

  • dotnet-dump:可直接在客户机抓取并分析内存转储
    1. 在客户机部署工具:可通过dotnet tool install --global dotnet-dump安装后,复制工具目录到客户机;或直接下载对应版本的独立工具包
    2. 抓取转储:执行命令 dotnet-dump collect -p <目标进程ID>
    3. 本地分析:将生成的转储文件传回本地,用dotnet-dump analyze <转储文件路径>启动分析会话,通过dumpheap、gcroot、eeheap等命令排查托管/非托管内存占用细节
  • dotnet-counters:实时监控内存关键指标,快速定位增长趋势
    • 执行命令:dotnet-counters monitor --process-id <进程ID> --counters System.Runtime,可查看GC堆大小、对象分配速率、垃圾回收次数等核心指标

2. 使用PerfView远程收集内存数据

PerfView是微软官方免费诊断工具,支持远程内存分析,操作步骤:

  1. 将PerfView.exe复制到客户机(无需安装)
  2. 在客户机启动PerfView,点击Collect -> Memory,配置收集选项(如勾选"GC Heap Allocation Sampling"、"Native Memory Tracking")
  3. 启动收集后,让应用运行一段时间,停止收集后将生成的.etl文件传回本地
  4. 用本地的PerfView打开.etl文件,分析内存分配热点、GC活动及非托管内存占用情况

3. 手动创建VSDiagnostics内存分析配置

若坚持使用VSDiagnostics.exe,可手动生成内存分析所需的代理配置文件:

  1. 参考现有配置(如DotNetObjectAllocBase.json),创建DotNetMemoryBase.json文件,示例内容:
{
  "Name": ".NET Memory Analysis",
  "Description": "Collects .NET memory usage and allocation data",
  "Providers": [
    {
      "ProviderName": "Microsoft-Windows-DotNETRuntime",
      "Keywords": "0x1000",
      "Level": "Informational"
    },
    {
      "ProviderName": "Microsoft-Windows-DotNETRuntimePrivate",
      "Keywords": "0x200",
      "Level": "Verbose"
    }
  ]
}
  1. 将该配置文件与VSDiagnostics.exe一同复制到客户机,执行命令启动诊断:
    VSDiagnostics.exe start <进程ID> /config:DotNetMemoryBase.json /output:memory_diag.etl
  2. 收集完成后将memory_diag.etl传回本地,用Visual Studio的诊断工具或PerfView打开分析

内容的提问来源于stack exchange,提问作者Dominique

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 06:25:20