F# интерактивный дамп кучи GC
Я исследовал F# скрипт, работающий через FsiAnyCpu, который использовал много памяти. Я сделал снимок кучи с помощью PerfView, и похоже, что большинство узлов с большим количеством были внедрены в FSharp.Compiler!Microsoft.FSharp.Compiler.Ilxgen+IlxAssemblyGenerator
, Прежде чем сделать снимок, я запустил GC и заморозил процесс на время.
Эксклюзивный вид по умолчанию показывает:
Этого следовало ожидать?
1 ответ
FSI генерирует сборки, содержащие код, который вы оцениваете. Этот код может содержать корневые ссылки на объекты кучи. Выражения, которые вы оцениваете, могут также вызывать корневые ссылки. FSI, скорее всего, будет вести себя как утечка памяти - если REPL не помнит то, что вы ранее оценивали, это может быть не очень полезно. Он также может содержать открытые ссылки на файлы и сборки по тем же причинам.
В Visual Studio FSI предусмотрена команда контекстного меню под названием "Сброс интерактивного сеанса", которая все очищает. Для командной строки FSI, вероятно, вы можете просто прекратить его.