Witam Wszystkich!
Mówiąc bardzo skrótowo, pisze aplikację, która ma wygenerować pliki graficzne na podstawie plików HTML. Mam napisany fragment kodu, który z powodzeniem realizuje to zadanie. Natomiast przy większej ilości danych zapycha mi pamięć. Poniżej fragmenty kodu oraz błędy jakie otrzymuje podczas generowania.
Kod:
Stopwatch processStopWatch = new();
processStopWatch.Start();
await Parallel.ForEachAsync(productGroupIds, parallelOptions, async(groupId, token) =>
{
Stopwatch sw = new();
sw.Start();
//
StartBrowser(source);
//
sw.Stop();
}
processStopWatch.Stop();
private void StartBrowser(string source)
{
var th = new Thread(() =>
{
using var webBrowser = new WebBrowser();
webBrowser.ClientSize = new Size(PAGE_A4_WIDTH_PX, _pageHeight);
webBrowser.ScrollBarsEnabled = false;
webBrowser.DocumentText = source;
//
using (Bitmap bitmap =
new Bitmap(
PAGE_A4_WIDTH_PX,
_pageHeight))
{
Rectangle rec = new Rectangle(0, 0, PAGE_A4_WIDTH_PX, _pageHeight);
webBrowser.DrawToBitmap(bitmap, rec);
bitmap.Save(_filePath + _fileName + ".jpg",
System.Drawing.Imaging.ImageFormat.Jpeg);
bitmap.Dispose();
}
//
webBrowser.Dispose();
Application.Run();
});
th.SetApartmentState(ApartmentState.STA);
th.Start();
Thread.Sleep(250);
}
Błędy:
-
Attempted to read or write protected memory. This is often an indication that other memory is corrupt. 0x80004003
-
Error HRESULT E_FAIL has been returned from a call to a COM component. 0x80004005
-
Bieżący proces wykorzystał wszystkie dozwolone przez system dojścia do obiektów Window Manager. (0x80070486)
Jeżeli można tak napisać to błędy generują się "losowo". Nie ma reguły kiedy który. W każdym razie zazwyczaj po wygenerowaniu około 3tys plików aplikacja zaczyna się sypać.
Z góry dziękuję za pomoc.
Pozdrawiam,