У моей программы, увы, где-то есть утечка памяти, но я буду проклят, если знаю, что это такое.
Его работа заключается в чтении нескольких файлов размером ~ 2 МБ, анализе и замене строк, а затем выводе их в различных форматах. Естественно, это означает много строк, и поэтому трассировка памяти показывает, что у меня много строк, и это именно то, что я ожидал. Структура программы представляет собой серию классов (каждый в своем собственном потоке, потому что я идиот ), который действует на объект, который представляет каждый файл в памяти. (Каждый объект имеет входную очередь, которая использует блокировку на обоих концах. Хотя это означает, что я могу запустить эту простую обработку параллельно, это также означает, что у меня в памяти находится несколько объектов размером 2 МБ.) Структура каждого объекта определяется объектом схемы .
Мои классы обработки вызывают события, когда они выполнили свою обработку, и передают ссылку на большой объект, который содержит все мои строки, чтобы добавить его в очередь следующего объекта обработки. Замена события вызовом функции для добавления в очередь не останавливает утечку. Один из форматов вывода требует, чтобы я использовал неуправляемый объект. Реализация Dispose () в классе не останавливает утечку. Я заменил все ссылки на объект схемы индексным именем. Нет кости. Я понятия не имею, что вызывает это, и понятия не имею, где искать. Трассировка памяти не помогает, потому что все, что я вижу, - это набор строк, и я не вижу, где ссылки хранятся в памяти.
Мы в значительной степени собираемся сдаться и отступить на этом этапе, но у меня есть патологическая потребность точно знать, как я все испортил. Я знаю, что переполнение стека не может точно прочесать мой код, но какие стратегии вы можете предложить для отслеживания этой утечки? Я, вероятно, собираюсь сделать это в свое время, поэтому любой подход жизнеспособен.