0

これは、WPF でドキュメントを印刷するために必要なコードのスニペットです。大まかに言うと、UserControl をインスタンス化し、それをプリンターに送信します。

        var printQueue = GetQueues().Where(t => t.Name == comboBox1.SelectedItem.ToString()).FirstOrDefault();
        var defaultPrintTicket = printQueue.DefaultPrintTicket.Clone();
        var newTicket = ModifyPrintTicket(defaultPrintTicket, "psk:JobInputBin",
                                          ((PrintTrays)listBox1.SelectedItem).ConfigValue);

        var xpsWriter = PrintQueue.CreateXpsDocumentWriter(printQueue);

        var controlToPrint = new PackingSlip();
        var fixedDoc = new FixedDocument();
        var pageContent = new PageContent();
        var fixedPage = new FixedPage();

        fixedPage.Children.Add(controlToPrint);
        ((System.Windows.Markup.IAddChild)pageContent).AddChild(fixedPage);
        fixedDoc.Pages.Add(pageContent);
        xpsWriter.Write(fixedDoc, newTicket); 

私が疑問に思っているのは、時間の経過とともに何百もの のインスタンスを作成したことですcontrolToPrint。ここでメモリの問題が発生するのでしょうか、それとも何らかの方法で自動的に破棄されるのでしょうか? それらが自動的に破棄されない場合、どうすればそのメモリを解放できますか?

4

1 に答える 1

1

これらは、fixedDoc、fixedPage、pagecontent、およびcontrolToPrintがメソッドの最後でスコープ外になると想定して、自動的に破棄されます。アプリケーションルートがこれらのオブジェクトのいずれかへの参照を保持している場合、メモリリークが発生します

于 2012-04-25T14:12:28.590 に答える