【发布时间】:2018-10-03 03:40:37
【问题描述】:
我正在使用 iTextSharp,需要生成数十万个 RTF 文档 - 生成的文件在 5KB 到 500KB 之间。
我在下面列出了 2 种方法 - 原始方法不一定很慢,但我想出了为什么要写入和检索文件以获取我需要的输出字符串。我看到了使用 MemoryStream 的另一种方法,但它实际上减慢了速度。我基本上只需要输出的 RTF 内容,这样我就可以在该 RTF 上运行一些过滤器来清理不必要的格式。带回数据的查询看起来很快。使用原始方法文件生成 1000 个文件(实际上是在创建 2000 个文件)大约需要 15 分钟,与第二种方法相同大约需要 25-30 分钟。我运行的结果文件平均约为 80KB。
第二种方法有问题吗?似乎它应该比第一个更快,而不是更慢。
原来的做法:
RtfWriter2.GetInstance(doc, new FileStream(RTFFilePathName, FileMode.Create));
doc.Open();
//Add Tables and stuff here
doc.Close(); //It saves a file here to (RTFPathFileName)
StreamReader srRTF = new StreamReader(RTFFilePathName);
string rtfText = srRTF.ReadToEnd();
srRTF.Close();
//Do additional things with rtfText before writing to my final file
新方法,试图加快速度,但实际上速度只有一半:
MemoryStream stream = new MemoryStream();
RtfWriter2.GetInstance(doc, stream);
doc.Open();
//Add Tables and stuff here
doc.Close();
string rtfText =
ASCIIEncoding.ASCII.GetString(stream.GetBuffer());
stream.Close();
//Do additional things with rtfText before writing to my final file
我在这里找到的第二种方法是: iTextSharp - How to generate a RTF document in the ClipBoard instead of a file
【问题讨论】:
-
您正在处理的文件有多大?如果它不是很大,那么不,它不会有太大的不同。如果它很大,那么如果它过多地降低系统性能,您可能不想在内存中处理它。
-
您好,感谢您的回复。我有大约 400,000 个文件需要输出 - 介于 5KB 和 500KB 之间。我正在使用 iTextSharp 从 SQL 查询生成 RTF 内容。
-
重用内存流。即分配一次并将其用于所有文件,清除其间的内容。
-
您是否已经对此代码运行了分析器?不要猜测在哪里优化...知道在哪里优化。
标签: c# itextsharp