.NET 2.x Метод - Application.DoEvents(); - C#
Формулировка задачи:
Добрый день.
Есть такой метод: Application.DoEvents(); - Обрабатывает все сообщения Windows, которые в данный момент находятся в очереди сообщений.
Создаем консольное приложение
После остановки цикла и высвобождения памяти, память все ровно остается занятой непонятно чем.
Опытным путем выяснил что во всем виноват Application.DoEvents();
Если из цикла не выходить, а бесконечно гонять метод, то приложение начинает бесконечно ждать память (по чуть-чуть)
Может я не правильно пользуюсь сборщиком мусора?
Загружать страницу другими методами - не вариант, мне нужна поддержка обработки JS, редиректы и прочее.
Использовать бибилотеки со сторонними браузера тоже не выход
static void Main(string[] args) { var th = new Thread(() => { try { WebBrowser WB = new WebBrowser(); WB.ScriptErrorsSuppressed = true; WB.Navigate("https://www.google.ru/"); Stopwatch Таймер = new Stopwatch(); Таймер.Start(); Console.WriteLine("Перед циклом, программа занимает " + (Process.GetCurrentProcess().WorkingSet64 / 1024).ToString() + " KB"); while (true) { if (Таймер.ElapsedMilliseconds > 15 * 1000) break; Application.DoEvents(); Thread.Sleep(50); } WB.Dispose(); Таймер = null; Console.WriteLine("После цикла и высвобождение памяти браузера, программа занимает " + (Process.GetCurrentProcess().WorkingSet64 / 1024).ToString() + " KB"); GC.Collect(); GC.WaitForPendingFinalizers(); Console.WriteLine("После коллектора, программа занимает " + (Process.GetCurrentProcess().WorkingSet64 / 1024).ToString() + " KB"); Thread.Sleep(-1); } catch { } Environment.Exit(0); }); th.SetApartmentState(ApartmentState.STA); th.Start(); Thread.Sleep(-1); }
Решение задачи: «.NET 2.x Метод - Application.DoEvents();»
textual
Листинг программы
th.Abort();
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д