1
我的問題非常簡單。我需要在多用戶ERP環境中顯示打印預覽對話框。它說明印刷應該儘可能快。 但是,如果我使用下面的代碼,大約需要10!預覽顯示並完全生成之前的幾秒鐘。這是沒有數據庫訪問或任何其他CPU密集型操作。打印預覽性能
有沒有改善這種性能的方法或方法?如果有必要,我也可以使用WPF。
我注意到,如果您生成預覽,關閉它,然後再次快速生成它,它反應更快,大約一兩秒鐘。如果您再等5秒鐘左右,再次生成它,大概需要10秒。 我猜想某種類型的緩存正在進行,但沒有線索實際發生的事情。
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Printing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace PrintPerformanceTests
{
public class PrintPreviewTest
{
private string printerName;
private PrintPreviewDialog printPreviewDialog1;
private PrintDocument printDocument1 = new PrintDocument();
private Random random = new Random();
public string PrinterName
{
get { return printerName; }
set { printerName = value; }
}
public PrintPreviewDialog PrintPreviewDialog
{
get { return printPreviewDialog1; }
set { printPreviewDialog1 = value; }
}
public PrintPreviewTest(string printerName, PrintPreviewDialog printPreviewDialog)
{
this.PrinterName = printerName;
this.PrintPreviewDialog = printPreviewDialog;
printDocument1.PrintPage += new PrintPageEventHandler(printDocument1_PrintPage);
}
public void GenerateRandomPrintPreview()
{
Cursor.Current = Cursors.WaitCursor;
try
{
PrintPreviewDialog.Document = printDocument1;
PrintPreviewDialog.ShowDialog();
}
catch (Exception exc)
{
Cursor.Current = Cursors.Default;
MessageBox.Show(exc.ToString());
}
finally
{
Cursor.Current = Cursors.Default;
}
}
void printDocument1_PrintPage(object sender, PrintPageEventArgs e)
{
e.Graphics.PageUnit = GraphicsUnit.Millimeter;
using(Font f = new Font("Arial", 10f))
{
for (int i = 0; i < 20; i++)
{
string txt = "Random string " + i.ToString();
e.Graphics.DrawString(txt, f, Brushes.Black, new PointF(random.Next(10, 200), random.Next(10,280)));
}
}
e.HasMorePages = false;
}
}
}
用法:
PrintPreviewTest pt = new PrintPreviewTest(tbPrinter.Text, printPreviewDialog);
pt.GenerateRandomPrintPreview();
沒有關於所選打印機支持的紙張,最大可打印區域尺寸,默認打印設置等信息的打印預覽不值多少,恕我直言。我編寫了自己的打印預覽器,經過第三次或第四次迭代後,我認爲這些設置非常重要,所以我實際上正在做同樣的事情,但每個打印機只有一個應用程序實例。然後我添加「刷新」按鈕,任何人都應該在實例激活時更改默認打印設置。而且,查詢一臺打印機幾乎不需要時間,除非它是聯網的並且不可用(我的經驗)。 – Kitet 2016-08-16 18:35:08