Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我正在调查一个通过 FsiAnyCpu 运行的 F# 脚本,该脚本使用了大量内存。我使用 PerfView 拍摄了一个堆快照,看起来大多数高计数节点都植根于FSharp.Compiler!Microsoft.FSharp.Compiler.Ilxgen+IlxAssemblyGenerator. 在拍摄快照之前,我强制执行 GC 并在此期间冻结进程。
FSharp.Compiler!Microsoft.FSharp.Compiler.Ilxgen+IlxAssemblyGenerator
默认独占视图显示:
这是可以预料的吗?
FSI 生成程序集以包含您评估的代码。该代码可以保存对堆对象的根引用。您评估的表达式也可能导致根引用。FSI 很可能表现为设计使然的内存泄漏——如果 REPL 不记得您之前评估过的内容,它可能就没那么有用了。出于同样的原因,它还可以保存对文件和程序集的打开引用。
在 Visual Studio FSI 中,提供了一个名为“重置交互式会话”的上下文菜单命令,可以清理所有内容。对于命令行 FSI,您大概可以终止它。