1

我有一个包含两个应用程序的解决方案。一个是 Windows 服务项目,另一个是启动器(安装并启动 Windows 服务)。我想将内存分析器附加到已安装的 Windows 服务,以收集有关内存使用情况和对象大小的信息,以调查 OutOfMemory 异常。

是我使用的方法。
首先我运行“VSPerfCLREnv.cmd /samplegclife”。这应该初始化分析环境变量以启用内存分析。
然后我启动我的启动器,它启动服务。
最后 VS 2010 -> 分析 -> Profiler -> 附加(到 Windows 服务)。

但是当分析停止时,我看不到任何关于对象大小或内存使用的信息。
难道我做错了什么?

4

2 回答 2

0

我发现。
要将分析器附加到 .net 进程以收集内存数据,您应该遵循以下步骤:

1. 初始化分析环境变量:
VSPerfClrEnv /globalsamplegc
重新启动 PC。

2. 开始分析会话:
VSPerfCmd /start:"sample" /output:"C:\log.vsp" /crosssession

3. 将分析器附加到进程:
VSPerfCmd /attach:[PID]

4.停止分析:
VSPerfCmd /分离
VSPerfCmd /shutdown

有关更多信息,请参阅

于 2013-11-15T11:07:56.363 回答
0

实际上这意味着对象的内存在存储数据时已损坏...要排除此问题,您必须调用像 GC.collect() 这样的垃圾收集器并通过分配 null 来释放未使用的内存...例如:string sTest= “已测试”;字符串 sAssign=sTest;sTest=null;要查看对象的总内存,请使用 GC.GetTotalMemory(false);

于 2013-11-11T13:11:17.237 回答