Похоже, это связано с этой ошибкой . Он был исправлен в мастер-репо и должен сделать Chrome стабильным 75 (18 апреля, согласно календарю релиза Chromium ).
Между тем, можно проверить исправление в Chrome Canary .
Одна техника, которую я попробовал бы, состоит в том, чтобы систематически уменьшать объем кода, необходимо продемонстрировать проблему, не заставляя проблему уйти. Это неофициально известно, поскольку "делят и завоевывают", и мощный метод отладки. После того как у Вас есть небольшой пример, который демонстрирует ту же проблему, для Вас будет намного легче понять. Возможно, проблема памяти станет более ясной в той точке.
Существует только один человек, который может помочь Вам. Именем того человека является Tess Ferrandez. (беззвучная тишина)
Но серьезно. прочитайте ее блог (первая статья является довольно подходящей). Наблюдение, как она отлаживает этот материал, даст Вам большое глубокое понимание знания, что продолжает Вашу проблему.
Мне нравится Профилировщик CLR от Microsoft. Это обеспечивает некоторые большие инструменты для визуализации утечки разыскивания и управляемая "куча".
Я использую dotTrace профилировщика для того, чтобы разыскать утечки памяти. Это намного более детерминировано, чем методологический метод проб и ошибок и поднимает результаты намного быстрее.
Для любых действий, которые выполняет система, я беру снимок, затем выполняет несколько повторений функции, затем берут другой снимок. Сравнение этих двух покажет Вам все объекты, которые были созданы промежуточные, но не были освобождены. Можно затем видеть стековый фрейм при их создании и поэтому разработать, какие экземпляры не освобождаются.
Получите это: http://www.red-gate.com/Products/ants_profiler/index.htm
Память и профилирование производительности являются потрясающими. Способность на самом деле счесть нужным числа вместо предположения делает оптимизацию довольно быстро. Я использовал его вполне немного на работе для сокращения объема потребляемой памяти нашего главного приложения.
Управляемая отладка добавляет в SoS (Сын Забастовки) очень мощно для того, чтобы разыскать управляемую память 'утечки', так как они, по определению поддающиеся обнаружению от корней gc.
Это будет работать в WinDbg или Visual Studio (хотя во многих отношениях легче использовать в WinDbg),
Нисколько не легко справиться с. Вот учебное руководство
Я был бы второй рекомендация проверить блог Tess Fernandez также.
Как Вы знаете для того, что у Вас на самом деле есть утечка памяти?
Еще одна вещь: Вы пишете, что Ваши классы обработки используют события. При регистрации обработчика событий, это сохранит объект, который владеет живым событием - т.е. GC не может собрать его. Удостоверьтесь, что Вы вычеркиваете из списка все обработчики событий, если Вы хотите, чтобы Ваши объекты были собраны "мусор".
Будьте осторожны, как Вы определяете "утечку". "Использование, больше памяти" или даже "использует слишком много памяти", не является тем же как "утечкой памяти". Это особенно верно в собравшей "мусор" среде. Может просто случиться так, что GC не должен был собирать дополнительную память, которую Вы видите используемый. Также будьте осторожны относительно различия между использованием виртуальной памяти и использованием физической памяти.
Наконец не все "утечки памяти" вызываются видами "памяти" проблем. Мне когда-то сказали (не спрошенному) для фиксации срочной утечки памяти, которая заставляла IIS часто перезапускать. На самом деле я сделал профилирование и нашел, что использовал много строк через класс StringBuilder. Я реализовал пул объектов (из статьи MSDN) для StringBuilders, и использование памяти понизилось существенно.
IIS, все еще перезапущенный так же, как часто. Это было то, потому что не было никакой утечки памяти. Вместо этого был неуправляемый код, который утверждал, что был ориентирован на многопотоковое исполнение, но не был. Используя его в веб-сервисе (несколько потоков) заставил его писать на всем протяжении "кучи" Библиотеки времени выполнения C. Так как никто не искал неуправляемые исключения, никто не видел это, пока я, оказалось, не сделал некоторого профилирования с AQtime от Автоматизированного QA. Это, оказывается, имеет окно событий, которое, оказалось, отобразило крики боли от Библиотеки времени выполнения C.
Ушли помещенные блокировки вокруг вызовов к неуправляемому коду и "утечка памяти".
Если Ваш неуправляемый объект действительно является причиной утечки, можно хотеть иметь его вызов AddMemoryPressure
когда это выделяет неуправляемую память и RemoveMemoryPressure
в Finalize
/Dispose
/, где когда-либо это освобождает неуправляемую память. Это даст GC лучший дескриптор на ситуации, потому что это не может понять, что существует потребность запланировать набор иначе.
Вы упомянули что Ваши события использования. Вы удаляете обработчики из тех событий когда Ваш сделанный с Вашим объектом? Я нашел, что 'свободные' обработчики событий вызовут много проблем утечки памяти, если Вы добавите набор обработчиков, не удаляя их когда Ваш сделанный.
Лучшая память профильный инструмент для .NET является этим:
Кроме того, в то время как я здесь, лучший профилировщик производительности для .NET - это:
http://www.yourkit.com/dotnet/download/index.jsp
Они - также большое соотношение цены и качества, имеют низко наверху и просты в использовании. Любой серьезно относящийся к разработке .NET должен считать оба из них персональными инвестициями и покупкой сразу. У них обоих есть бесплатная демонстрационная версия.
Я работаю над оперативным игровым механизмом с по 700k строкам кода, записанным в C#, и провел сотни часов с помощью обоих этих инструментов. Я использовал Научный Технический продукт с 2002 и YourKit! в течение прошлых трех лет. Хотя я попробовал довольно многих из других, я всегда возвращался к ним.
По моему скромному мнению, они являются оба абсолютно блестящими.