.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();