Я сейчас нахожусь в поиске утечек памяти в длинном сервисе (использующем F #).Единственная «странная» вещь, которую я до сих пор видел, это следующее:
- Я использую MailboxProcessor в подсистеме с алгебраическим типом данных с именем QueueChannelCommands (более или менее куча команд Add / Get- некоторые с присоединенным AsyncReplyChannels *
- , когда я профилирую службу (используя Ants Memory Profiler), я вижу экземпляры массивов упомянутого типа (большинство имеют длину 4, но растут) - все пустые (нулевые), чьи ссылки кажутсябудет удерживаться Control.Mailbox:
Я не вижу никакой причины в моем коде для такого поведения (ваш стандартный код, который вы можете найти в каждом примере с почтовым ящиком - просто цикл сlet! = receive
и последующий match
заканчивались return! loop()
Кто-нибудь видел такое поведение раньше или даже знает, как с этим справиться? Или это даже (известная) ошибка?
Обновление: рост массивов действительно странный - кажется, что добавлено дополнительное пространство без правильного использования: