Как зафиксировать утечку памяти в управлении IE WebBrowser?

Попробуйте это ..

Date dt = new Date(date1);
SimpleDateFormat sdf = new SimpleDateFormat("hh:mm aa");
String time1 = sdf.format(dt);
29
задан Rainer Falle 26 May 2009 в 20:40
поделиться

4 ответа

Я использую веб-контроль в приложении, но поскольку мое приложение переходит только на одну страницу, я не заметил проблема, которую вы упомянули. Есть еще один веб-элемент управления, который на самом деле является оболочкой, и я не знаю, есть ли у него такая же проблема или нет. Вы можете найти его здесь .

0
ответ дан 28 November 2019 в 01:56
поделиться

Есть альтернативный элемент управления , который использует Gecko (движок, который использует Firefox) вместо Trident и очень хорошо работает с интерфейсами MSHTML.

Ваши страницы будут отображаться в Gecko , и у вас будет полный контроль над настройками, плагинами, безопасностью и любыми другими настраиваемыми функциями браузера.

Обратной стороной является то, что вам нужно будет поставлять Gecko с вашим приложением, в последний раз я использовал эквивалент Firefox 2 и это было около 8 МБ.

Некоторое время назад я выпустил приложение, которое сравнивало рендеринг IE и Firefox вместе, оба обновлялись по мере того, как вы редактировали CSS. Я не сталкивался с проблемами памяти, которые у вас были с элементом управления веб-браузера, но я обнаружил, что с элементом управления Gecko очень легко работать. У него нет такого же управляемого класса оболочки, как у элемента управления .net WebBrowser,

3
ответ дан 28 November 2019 в 01:56
поделиться

Я только что создал простое приложение с элементами управления веб-браузера, чтобы попытаться воспроизвести ваши результаты. Я обнаружил, что да, каждый раз, когда вы переходите на страницу, используемая память значительно увеличивается. ОДНАКО, это НЕ утечка памяти, потому что, если вы продолжите навигацию, вы увидите, что через некоторое время объем памяти значительно упадет, что указывает на то, что сборщик мусора сделал это. Чтобы доказать это, я заставлял сборщик мусора собирать данные после каждого вызова Navigate, и общая используемая память оставалась почти такой же после каждого вызова навигации.

Таким образом, хотя он ДЕЙСТВИТЕЛЬНО набирает память каждый раз, когда вы "перемещаетесь", это НЕ утечка памяти, и вы освободите память. Если он набирает слишком быстро, просто вызовите GC.Collect ();

7
ответ дан 28 November 2019 в 01:56
поделиться

Я столкнулся с той же проблемой, в качестве альтернативы, вместо перехода на новую страницу, я просто переписал ту же html-страницу, используя объект system.oi.streamreader / writer и вызвав обновить. Очевидно, что это не сработает в ситуации, когда контент для браузера загружается онлайн, но он помогает мне.

Кроме того, в настоящее время я использую 8+ элементов управления браузером, все активные одновременно, для предоставления отчетов через javascript внутри моего приложения .net. Когда пользователь делает активным один браузер, HTML-код, на который указывают другие браузеры, очищается, а браузеры обновляются. С 8 браузерами, работающими с этими двумя методами, я могу легко сохранить свое приложение в соответствии с потреблением памяти Firefox, открыв всего 3 вкладки.

0
ответ дан 28 November 2019 в 01:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: