2014-12-10 2 views
2

Я изучал скрипт F #, запущенный через FsiAnyCpu, который использовал много памяти. Я взял снимок кучи, используя PerfView, и похоже, что большинство узлов с высоким количеством узлов были внедрены в FSharp.Compiler!Microsoft.FSharp.Compiler.Ilxgen+IlxAssemblyGenerator. Прежде чем сделать снимок, я заставил GC и заморозил процесс на время.F # interactive GC heap dump

по умолчанию эксклюзивный вид показывает:

enter image description here

ли это можно ожидать?

ответ

3

FSI генерирует сборки, чтобы содержать код, который вы оцениваете. Этот код может содержать привязанные ссылки на объекты кучи. Выражения, которые вы оцениваете, также могут приводить к корневым ссылкам. FSI, скорее всего, будет вести себя как утечка памяти при проектировании - если REPL не помнит, что вы ранее оценили, возможно, это не так полезно. Он также может хранить открытые ссылки на файлы и сборки по тем же причинам.

В Visual Studio FSI предусмотрена команда контекстного меню под названием «Сбросить интерактивную сессию», которая очищает все. Для командной строки FSI предположительно вы можете просто ее прекратить.