【发布时间】:2009-04-22 11:59:36
【问题描述】:
我正在使用 D6 Professional,需要从内存中已有的大量小字符串创建特定格式的文本文件。出于性能原因,我正在考虑使用 TMemoryStream 来整理文件数据,然后通过 TFileStream 将其一次性写入磁盘。
但是我有一半被遗忘的记忆(可能从 D6 之前的日子开始)在某处阅读 TMemoryStream 效率低下,尤其是在它达到其容量大小之后。我的 Delphi(和 Windows API)技能不足以自己检查 Classes.pas 代码。
(OFFTOPIC)尤其是这样的代码:(Classes.pas 的第 5152 行):
NewCapacity := (NewCapacity + (MemoryDelta - 1)) 而不是 (MemoryDelta - 1);
(/OFFTOPIC)
更让我担心的是,一个相关问题的结论
Using MemoryStream to write out to XML
不使用 TMemoryStream,但没有说明原因 - 是因为 TMemoryStream 本身,还是因为 TFileStream 或 I/O 设备驱动程序中有足够的缓冲,或者只是代码的细节有问题。
感谢您的建议
问候,
菲尔W。
【问题讨论】:
-
嗨,Phil,您最终使用了任何缓冲吗?我可以从谷歌浏览这个页面,想知道缓冲是否会加快我写入文件的速度。我正在将数百万个大整数写入文件并最终尝试了 Ryan 链接到的 TaaWriteBufferFilter,它将 Win XP Pro 上的 30 秒保存时间减少到大约 6 秒!所以我想说,如果你正在做很多小写,我会说绝对值得你花几分钟时间看看用缓冲流包装你的 TFileStream 是否有帮助!谢谢:D