Интерактивный F# (и в общих инструментах REPL-стиля) является идеальным входом к профилированию производительности. Что могло быть легче, чем выбрать блок кода и отправить его правильный профилировщику, который возвратится с аналитическим отчетом о производительности. К сожалению, похоже, что у существующих профилировщиков нет поддержки REPL: необходимо или присоединить профилировщика к процессу или указать и исполняемый файл или веб-приложение для профилирования.
Что я заканчиваю тем, что делал, затем переносит блок кода для профилирования в модульном тесте и затем выполняет профиль против сессии командной строки NUnit. Но действительно ли это является лучшим, мы можем сделать прямо сейчас с F#?
Для этого можно попробовать использовать программный API профилировщика. Я не пробовал, но вот инструкция для профилировщика ANTS: http://help.red-gate.com/help/ANTSProfiler3/0/en/Topics/AP_UsingTheAPI.html
Я думаю, что следующее может быть успешным:
DotTrace имеет (имел?) Похожий API (CPUProfiler.Start () /. StopAndTakeSnapshot ()), но я не смог найти ссылки на последние версии.
В чем вопрос?
Вы знаете о команде #time
? Например.
#time "on"
for i in 1..1000000 do
let r = f(i)
ignore r
, который дает интерактивный вывод F #, например
--> Timing now on
Real: 00:00:00.000, CPU: 00:00:00.000, GC gen0: 0, gen1: 0, gen2: 0
. В любом случае, я думаю, что просто поместить код в приложение и запустить профиль в приложении лучше, чем тест NUnit. В любом случае, да, вам может потребоваться дополнительные 30 секунд времени, чтобы вставить код в новое приложение и скомпилировать его в режиме выпуска. Но это цена, которую я готов заплатить, чтобы получить обширную информацию о профилировании, которую предоставляет Visual Studio. В идеале опыт мог бы быть лучше, но я сомневаюсь, что вы найдете какие-либо инструменты профилирования, поддерживающие REPL, сегодня (или завтра).
Но это лучшее, что мы можем сделать сейчас с F#?
AFAIK, да. Однако это отличная идея для следующей версии F# или стороннего продукта!