gpt4 book ai didi

c# - 有没有办法让它更快?内存流与文件流

转载 作者:行者123 更新时间:2023-11-30 22:42:26 29 4
gpt4 key购买 nike

我正在使用 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

最佳答案

您的结果流有多大? MemoryStream 在增长时执行大量内存复制操作,因此对于大结果,与 FileStream 相比,以小块写入数据可能需要更长的时间。

要验证是否是问题所在,请将 MemoryStream 的初始大小设置为结果大小附近的某个较大值,然后重新运行代码。

要修复它,您可以先预增长内存流(如果您知道大概的输出)或编写您自己的流,在增长时使用不同的方案。同样使用临时文件可能足以满足您的目的。

关于c# - 有没有办法让它更快?内存流与文件流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4419397/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com