小编Sam*_*Sam的帖子

从WPF打印速度非常慢

我最近花了很多时间试图弄清楚为什么我正在开发的应用程序(.Net 4.0,WPF前端)打印速度如此之慢,而且我完全没有想法(25分钟以上)打印150页).

我已经尝试了各种打印方法(PrintDialog,XpsDocumentWriter,VisualsToXpsDocument),它们都是直接来自控件的矢量数据,也是首先渲染控件(RenderTargetBitmap)并只发送图像,但每种方法都给出了大致相同的结果.

有趣的是,当使用VisualsToXpsDocument进行批量写入时,我可以在打印框架处理21页所花费的时间内创建186页的内容.这里出了点问题.

为了确保这不仅仅是应用程序中某些控件的复杂性问题,我创建了一个独立的演示应用程序,其中只包含一个填充了4000行静态数据和大约8列的数据网格.数据网格本身没有性能问题,只需打印即可.这是我一直使用的最常用的方法,结果不佳.

        this.writer 
          = PrintQueue.CreateXpsDocumentWriter(this.SelectedPrinter.PrintQueue);

        PrintingDocumentPaginator paginator 
          = new PrintingDocumentPaginator(this.PrintConfiguration, 
                contentSize, pageSize, contentRect, this.printSource, false);

        this.writer.WritingProgressChanged += this.OnPrintingProgressChanged;
        this.writer.WritingCompleted += this.OnPrintingCompleted;
        this.writer.WritingCancelled += this.OnPrintingCanceled;

        this.writer.WriteAsync(paginator, 
                this.PrintConfiguration.PrintTicket, paginator.PageCount);
Run Code Online (Sandbox Code Playgroud)

或者,如果我使用以下代码,对EndBatchWrite()的调用将非常快速地进行,其余的打印过程会花费更长的时间.

        this.writer 
          = PrintQueue.CreateXpsDocumentWriter(this.SelectedPrinter.PrintQueue);

        PrintingDocumentPaginator paginator 
            = new PrintingDocumentPaginator(this.PrintConfiguration, 
                    contentSize, pageSize, contentRect, 
                    this.printSource, this.useVectorData);

        this.writer.WritingProgressChanged += this.OnPrintingProgressChanged;
        this.writer.WritingCompleted += this.OnPrintingCompleted;
        this.writer.WritingCancelled += this.OnPrintingCanceled;

        VisualsToXpsDocument sdf 
          = (VisualsToXpsDocument)this.writer.CreateVisualsCollator();

        for (int i = 0; i < paginator.PageCount; i++)
        {
            sdf.WriteAsync(paginator.GetPageVisual(i));
        }

        sdf.EndBatchWrite();
Run Code Online (Sandbox Code Playgroud)

那么我在这里做错了什么?我是否向打印机发送了错误的数据?我有没有看到一些秘密?

编辑 - 这适用于物理打印机以及文件打印机,即XPS打印机,PDF等.

干杯,

山姆.

printing wpf performance .net-4.0

8
推荐指数
1
解决办法
1743
查看次数

标签 统计

.net-4.0 ×1

performance ×1

printing ×1

wpf ×1