繁体   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