Во-первых, выясните, может ли утечка быть вызвана регистрацией обработчиков событий, так как это один из самых простых способов случайного укоренения ваших объектов. Например, если у вас есть класс «Bob», который добавляет один из своих методов «OnSomeEvent» в качестве делегата к событию, которое вызывается долгоживущим компонентом вашей системы (например, «UserSettingsManager»), тогда объекты класса «Bob» 'не будут собраны, поскольку они поддерживаются в силу того, что они являются обработчиками событий (т.е. обратные вызовы событий не являются слабыми ссылками).
В качестве альтернативы коммерческим инструментам есть отладчик Windows под названием SoS (Son of Strike), который можно использовать для отладки управляемых приложений. Тем не менее, это не слабонервный, так как это низкоуровневый инструмент командной строки, который требует много предварительных знаний. Однако он очень мощный и не так сильно борется с большими процессами (с точки зрения потребления кучи), как коммерческие инструменты.
Что касается коммерческих профилировщиков, у меня был хороший опыт использования ANG Memory Profiler от Redgate (но у меня были коллеги, которые его ненавидят), так что, возможно, стоит попробовать это.