[英]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.