Delphi TFileStream的WriteBuffer Int64大小有限,能否每次只写少量数据而不影响整体性能?

2026-04-10 21:392阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计372个文字,预计阅读时间需要2分钟。

Delphi TFileStream的WriteBuffer Int64大小有限,能否每次只写少量数据而不影响整体性能?

我正在尝试编写更大的块来提高文件保存速度。我有大约69个这样的循环需要转换,但我不确定我犯了什么错误。以下是代码片段:

fs :=TFileStream.Create(MyFile, fmCreate);此代码有效;for RecordGroup :=0 to TotalGroups do

我正在尝试编写更大的块来提高文件保存的速度.我有大约9个这些循环要转换,但我无法弄清楚我做错了什么

Delphi TFileStream的WriteBuffer Int64大小有限,能否每次只写少量数据而不影响整体性能?

fs := TFileStream.Create(Myfile, fmCreate);

此代码有效:

for RecordGroup := 0 to TotalGroups - 1 do begin for RecordNumber := 0 to Length(MyArray[RecordGroup]) - 1 do begin fs.WriteBuffer(MyArray[RecordGroup,RecordNumber],SizeOf(MyRecord)); end; end;

当我删除内部循环以编写更大的块时,代码不起作用:

for RecordGroup := 0 to TotalGroups - 1 do begin fs.WriteBuffer(MyArray[RecordGroup],SizeOf(MyRecord) * Length(MyArray[RecordGroup])); end;

我得到通用错误’Stream write error’

SizeOf(MyRecord)* Length(MyArray [RecordGroup])的值是180 * 152,004 = 27,360,720

我读过的所有内容基本上都说这是正确的.我有什么想法我做错了吗?

提前感谢您的任何想法.

将编写代码更改为(注意方括号中的附加0)

fs.WriteBuffer(MyArray[RecordGroup, 0], SizeOf(MyRecord) * Length(MyArray[RecordGroup]));

错误是动态数组使用错误.我假设MyArray是二维数组,因此MyArray [RecordGroup]是1D动态数组 – 本质上是指向数据的指针 – 但WriteBuffer的无类型var参数需要使用数组数据体.

除了注意 – 你的for循环计数器从0到TotalGroups,所以循环的总数是TotalGroups 1.它是否正确?

本文共计372个文字,预计阅读时间需要2分钟。

Delphi TFileStream的WriteBuffer Int64大小有限,能否每次只写少量数据而不影响整体性能?

我正在尝试编写更大的块来提高文件保存速度。我有大约69个这样的循环需要转换,但我不确定我犯了什么错误。以下是代码片段:

fs :=TFileStream.Create(MyFile, fmCreate);此代码有效;for RecordGroup :=0 to TotalGroups do

我正在尝试编写更大的块来提高文件保存的速度.我有大约9个这些循环要转换,但我无法弄清楚我做错了什么

Delphi TFileStream的WriteBuffer Int64大小有限,能否每次只写少量数据而不影响整体性能?

fs := TFileStream.Create(Myfile, fmCreate);

此代码有效:

for RecordGroup := 0 to TotalGroups - 1 do begin for RecordNumber := 0 to Length(MyArray[RecordGroup]) - 1 do begin fs.WriteBuffer(MyArray[RecordGroup,RecordNumber],SizeOf(MyRecord)); end; end;

当我删除内部循环以编写更大的块时,代码不起作用:

for RecordGroup := 0 to TotalGroups - 1 do begin fs.WriteBuffer(MyArray[RecordGroup],SizeOf(MyRecord) * Length(MyArray[RecordGroup])); end;

我得到通用错误’Stream write error’

SizeOf(MyRecord)* Length(MyArray [RecordGroup])的值是180 * 152,004 = 27,360,720

我读过的所有内容基本上都说这是正确的.我有什么想法我做错了吗?

提前感谢您的任何想法.

将编写代码更改为(注意方括号中的附加0)

fs.WriteBuffer(MyArray[RecordGroup, 0], SizeOf(MyRecord) * Length(MyArray[RecordGroup]));

错误是动态数组使用错误.我假设MyArray是二维数组,因此MyArray [RecordGroup]是1D动态数组 – 本质上是指向数据的指针 – 但WriteBuffer的无类型var参数需要使用数组数据体.

除了注意 – 你的for循环计数器从0到TotalGroups,所以循环的总数是TotalGroups 1.它是否正确?