Я работаю над проектом, в котором существует огромное количество объектов, создаваемых несколькими классами, которые остаются в памяти на всю жизнь приложения. Есть много утечек памяти, вызванных тем, что OutOfMemoryExceptions бросаются время от времени. Похоже, что после того, как объекты, созданные из объектов, были недоступны, они не собираются мусором.
Я выделил проблему главным образом в обработчиках событий, которые привязаны к долгоживущему объекту, который никогда не отделяется, тем самым заставляя долгоживущий объект по-прежнему ссылаться на объекты вне области видимости, которые затем никогда не будет собираться мусор.
Решение, предложенное моими коллегами, следующее: Внедрить IDisposable для всех классов, по всем направлениям и в методе Dispose, обнулить все ссылки в ваших объектах и отделить все события, к которым вы присоединились.
Я считаю, что это действительно очень плохая идея. Во-первых, потому что он "перебор", поскольку проблема может быть решена главным образом путем исправления нескольких проблемных областей, а во-вторых, поскольку целью IDisposable является освобождение любых неуправляемых ресурсов, которыми управляют ваши объекты, а не потому, что вы не доверяете сборщику мусора. До сих пор мои аргументы не угасали. Как я могу убедить их, что это бесполезно?