На днях я исследовал утечку памяти, которая запускала приложение с ~ 50 МБ до ~ 130 МБ в течение двух минут. Оказывается, проблема была в классе ConcurrentQueue. Внутри класса хранится связанный список массивов. Когда элемент выгружается из ConcurrentQueue, индекс в массиве сталкивается, но элемент остается в массиве (т.е. Он не установлен в null). Весь массив node отбрасывается после достаточного количества очередей /dequeues, поэтому это не технически является утечкой, но если положить большие объекты в ConcurrentQueue, это может быстро выйти из-под контроля. В документации не упоминается об этой опасности.
Мне было интересно, какие другие потенциальные ловушки памяти находятся в библиотеке базового класса? Я знаю о Подстроке один (то есть, если вы вызываете подстроку и просто держитесь за результат, вся строка будет по-прежнему в памяти). Любые другие, с которыми вы столкнулись?