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