簡體   English   中英

為什么ITextSharp需要很長時間才能創建pdf?

[英]Why ITextSharp takes long time to create pdf?

我的應用程序首先將文本文件加載到richtextbox中,而不會遇到任何問題:

        StreamReader str = new StreamReader("C:\\test.txt");

        while (str.Peek() != -1)
        {

            richtextbox1.AppendText(str.ReadToEnd());
        }

之后,我想使用itextsharp將richtextbox的文本導出為pdf格式:

      iTextSharp.text.Document doc = new iTextSharp.text.Document();
        iTextSharp.text.pdf.PdfWriter.GetInstance(doc, new FileStream(filename,        FileMode.Create));
        doc.Open();
        doc.Add(new iTextSharp.text.Paragraph(richtextbox1.Text));
        doc.Close();

我已經使用了backgroundworker,但是它沒有幫助我:

     private delegate void upme(string filenamed);

   private void callpdf(string filename)
    {
        iTextSharp.text.Document doc = new iTextSharp.text.Document();
        iTextSharp.text.pdf.PdfWriter.GetInstance(doc, new FileStream(filename, FileMode.Create));
        doc.Open();
        doc.Add(new iTextSharp.text.Paragraph(richtextbox1.Text));
        doc.Close();
    }

    private void savepdfformat(string filenames)
 {
     BackgroundWorker bg = new BackgroundWorker();

     bg.DoWork += delegate(object s, DoWorkEventArgs args)
     {
        upme movv = new upme(callpdf);

        richtextbox1.Dispatcher.Invoke(movv, System.Windows.Threading.DispatcherPriority.Normal, filenames);

     };
     bg.RunWorkerCompleted += delegate(object s, RunWorkerCompletedEventArgs args)
     {
         MessageBox.Show("done");
     };

     bg.RunWorkerAsync();   
}

該test.txt約為2 MB的大小,它在richtextbox1中加載非常快,但是當我想

將其轉換為pdf,這會花費很多時間,並且應用程序會掛起。

我該怎么做優化?

謝謝你的幫助。

解決方案很簡單:逐行讀取text.txt文件,為每行創建一個Paragraph ,然后將每個Paragraph對象盡快添加到文檔中。

為什么這是解決方案?

您的代碼在設計上存在缺陷:它消耗大量內存:首先在richtextbox1對象中加載2 MB。 然后,將相同的2 MB加載到Paragraph對象中。 原始的2 MByte仍在內存中,但是Paragraph開始分配內存來處理文本。 然后,將Paragraph添加到文檔中。 內存以每頁為單位釋放(iText在頁面填滿后立即刷新內容),但是處理仍然需要大量內存。 當您的計算機“掛起”時,他可能正在交換內存。

我知道您的昵稱是聰明人,但我猜您是年輕人。 如果您和我一樣大,那您將知道內存昂貴且無法承受設計浪費內存的日子;-)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM