Używam OpenXML SDK 2.0 do generowania pliku Excel z dużą ilością danych, appox. 1000000 wierszy i muszę zoptymalizować wykorzystanie pamięci, ponieważ moja maszyna bardzo szybko zwalnia.Jak skutecznie buforować i czyścić strumień w Open XML SDK
Chcę rozwiązać ten problem, przepłukując część wygenerowanego drzewa DOM do pliku w środowisku wykonawczym. Wykonuję własne buforowanie danych. E.g Mam do zapisania 100000 rekordów i chcę, aby strumień był przepuszczany do pliku po dodaniu 1000 wierszy do arkusza programu Excel. Robię to za pomocą metody worksheetPart.Worksheet.Save(). Documantation mówi taht tej metody save() „zapisuje dane w drzewie DOM z powrotem do części mogłaby być wywołana wiele razy jak dobrze Za każdym razem to się nazywa, strumień zostanie oczyszczony.”.
foreach (Record m in dataList)
{
Row contentRow = CreateContentRow(index, m); // my own method to create row content
//Append new row to sheet data.
sheetData.AppendChild(contentRow);
if (index % BufferSize == 0)
{
worksheetPart.Worksheet.Save();
}
index++;
}
Ta metoda działa, ponieważ wykres wykorzystania pamięci ma kształt piłokształtny, ale niestety pamięć pamięci rośnie w czasie.
Czy ktoś ma pomysł, jak rozwiązać ten problem?
Dziękuję za odpowiedź. Sprawdzę, czy SpreadsheetGear pomoże mi rozwiązać mój problem. Przedstawiam mój problem z wydajnością Open XML SDK w tym poście: http: //blog.goyello.com/2009/08/25/read-before-using-it-open-xml-sdk-performance-analysis/ –
Doskonale sformułowane pytanie, które pojawia się jako pierwszy wynik w Google. Obejrzano 1200 razy. A jedyną odpowiedzią jest żałosna wtyczka do zewnętrznej biblioteki detalicznej? – mdisibio
Zwłaszcza, że jest to bardzo drogie biblioteki stron trzecich. Przy 1000 USD, arkusz kalkulacyjny jest zbyt drogi. – Wade73