Создание фиксированного документа вызывает утечку памяти
Я создаю отчет WPF в своем приложении, и я обнаружил, что каждый раз, когда я создаю отчет, отчет остается в памяти. Я полностью уничтожил содержимое документа, и я печатаю только один пустой UserControl. Я сократил код до минимума, но он все еще протекает. Ты хоть представляешь, что я делаю не так или нет?
Профилирование показывает, что проблема в том, что ContextLayoutManager сохраняет ссылку на FixedPage в ContextLayoutManager.LayoutQueue.Request.
private AutoResetEvent _documentGenerated = new AutoResetEvent(false);
private Stream _outputStream;
private void button1_Click(object sender, RoutedEventArgs e)
{
using (_outputStream = new FileStream(@"c:\report_tst.xps", FileMode.Create))
{
Thread thread = new Thread(new ThreadStart(doWork));
thread.Name = "Report generating thread";
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
_documentGenerated.WaitOne();
}
}
private void doWork()
{
FixedDocument fixedDoc = new FixedDocument();
PageContent pageContent = new PageContent();
FixedPage fixedPage = new FixedPage();
fixedPage.Children.Add(new UserControl());
((IAddChild)pageContent).AddChild(fixedPage);
fixedDoc.Pages.Add(pageContent);
var package = Package.Open(_outputStream, FileMode.Create);
var xpsDoc = new XpsDocument(package, CompressionOption.Normal);
XpsDocumentWriter xpsWriter = XpsDocument.CreateXpsDocumentWriter(xpsDoc);
xpsWriter.Write(((IDocumentPaginatorSource)fixedDoc).DocumentPaginator);
xpsDoc.Close();
package.Close();
_documentGenerated.Set();
}
Спасибо за любой совет.