Удаление страницы Flowdocument после рендеринга - PullRequest
2 голосов
/ 11 ноября 2011
            //Create a User Control with a TextBlock
            TextBlock textBlock = new TextBlock();
            textBlock.Text = "Helo";
            UserControl userCOntrol = new UserControl();
            userCOntrol.Content = textBlock;

            //Add the UserControl to a Table
            table.RowGroups[0].Rows[0].Cells[0].Blocks.Add(new Paragraph(new InlineUIContainer(userCOntrol as UIElement)));

            //Add the table to a FlowDocument
            FlowDocument flowDocument = new FlowDocument();
            flowDocument.Blocks.Add(table);

            //Fetch the Visual representation of the page.
            DocumentPage page = ((IDocumentPaginatorSource)flowDocument).DocumentPaginator.GetPage(0);


            //Extract the Visual from the page and add to a Fixed Page
            FixedPage fixedPage = new FixedPage();
            ContainerVisual container = new ContainerVisual();
            container.Children.Add(page.Visual);
            DrawingCanvas canvas= new DrawingCanvas();
            canvas.AddVisual(container);
            fixedPage.Children.Add(canvas);


            //now write the FixedPage to an XPS file
            using (XpsDocument xpsDoc = new XpsDocument("c:\\x.xps", FileAccess.ReadWrite))
            {
                XpsDocumentWriter xpsDw = XpsDocument.CreateXpsDocumentWriter(xpsDoc);
                xpsDw.Write(kj);
            }

Приведенный выше фрагмент кода ничего не освобождает. Как только потоковый документ разбит на страницы и извлечено визуальное представление страницы, содержимое потокового документа ссылается на визуальный элемент. таким образом, ни Visual не удаляется, ни содержимое flowdocument. Приведенный выше фрагмент кода при выполнении постоянно поднимается из памяти.

Кто-нибудь знает, как освободить память, занятую всеми этими ресурсами?

Заранее спасибо.

...