.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();
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д