Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。












想改善这个问题吗?更新问题,以使溢出。

4年前关闭。



on-topic





是否可以从命令行运行.NET垃圾收集器,例如没有编写代码?

编辑:

当被问到这个问题时,我的意思恰恰是这里对Java垃圾收集器的要求:

Improve this question

因此,如果有办法在JVM中执行此操作,则看不到它在.NET中不存在的原因

最佳答案

有一个选项,尽管我不知道这是否“安全生产”。也就是说,我不知道目标进程崩溃的风险有多大。但是,如果用于故障排除和/或分析,它可能会派上用场。

您可以将PerfView用于以下目的:

PerfView.exe ForceGC [ProcessName | Process ID]


或引用PerfView.exe /?输出:


...
用法:PerfView ForceGC流程

在指定进程上强制GC

参数:
流程要强制执行的流程的流程ID或流程名称(无扩展名的Exe)
GC。
...


这里的“问题”是,这将打开一个新的控制台窗口,完成后,提示您关闭此窗口。

但是,PerfView.exe会将大量可执行文件转储到%APPDATA%\PerfView\_version_中,这些可执行文件作为资源打包在PerfView.exe可执行文件中。

因此,一旦运行了PerfView.exe命令,就可以手动调用HeapDump.exe工具(在我的情况下为x64框,进程ID为15396):

cd C:\Users\MyUserName\AppData\Roaming\PerfView\VER.2014-02-04.09.06.52.000\AMD64
HeapDump.exe /ForceGC 15396


输出示例如下:

Loading the ETWClrProfiler.
Turning on debug privilege.
Highest Runtime in process is version v4.0.30319
  0,0s: Trying to attach a profiler.
  0,1s: Done Attaching ETLClrProfiler ret = 0
Attached ETWClrProfiler.
  0,1s: Enabling JScript Heap Provider
  0,1s: Enabling EtwClrProfiler
  0,1s: Enabling CLR GC events
  0,1s: Requesting a JScript GC
  0,1s: Requesting a DotNet GC
  4,0s: .NET GC Starting at 0,15s.
  4,0s: .NET GC stats, at 0,16s Survived 2221152.
  6,0s: .NET GC complete at 0,17s.
  6,0s: Triggered .NET GC,  No JScript heap detected
  6,1s: Requesting ETWClrProfiler unload.
  6,1s: Shutting down ETW session
[  6,1s: Done forcing GCs success=True]


请注意,以上内容不是AFAIK正式使用的工具,可能会停止与新版本一起使用。而且,当然,PerfView可以做的不仅仅是强制GC(开始here)。

在内部,上述方法使用CLR(ICorProfilerInfo::ForceGC)随附的source分析接口/方法。因此,为此目的编写“简单” /“独立”工具并不是完全不可能的。减。

更新:像这样的PerfView现在是open source,并且该工具在is part of it上面进行了讨论。以防您好奇。

09-04 01:01