TIniFile 的最大文件大小是多少?
What is the maximum file size for TIniFile?
我的程序使用 TIniFile 操作 ini 文件。我在单个部分中阅读了 TIniFile class has 64kb limit。但是,在我的测试中,它似乎可以处理超过 100kb 的文件。我正在使用 Delphi 10.3.3 和 Windows 10.
64kb 的限制是否只存在于旧版本的Windows?或者,我应该使用 TMemIniFile 来保证安全吗?
基本上,ini文件或例程GetPrivateProfileString
(TIniFile
用来读取数据)的大小没有限制。
但是在使用 TIniFile
.
时有一些限制和需要考虑的事项
查看 TIniFile
实现的代码(谢谢 Delphi),有几个地方 GetPrivateProfileString
用于从 ini 文件中检索数据。
在 TIniFile.ReadString
中,缓冲区大小固定为 2048 (2k),用于读取字符串值。
由于所有其他 'value' 请求例程使用此例程实际从 ini 文件中读取数据,它基本上限制了所有这些例程的缓冲区大小。
其次,TIniFile.ReadSections
例程使用 16384 (16k) 个字符的起始缓冲区。但是当这个缓冲区太小时,它会使用一个基于文件大小的动态缓冲区,所以这样你就不会 运行 陷入缓冲区问题(但因为这实际上是读取整个文件来估计缓冲区大小,对于大的 ini 文件,这将非常慢)。
最后,TIniFile.ReadSection
例程,它使用 1024 (1k) 的初始缓冲区大小。但在需要时动态分配更大的缓冲区。所以在这一点上,(文件)大小似乎也没有限制。
注意:此信息基于 Delhi 10.3 和 Delphi XE2。
在旧版本中,我们还有其他缓冲区分配策略...
我的程序使用 TIniFile 操作 ini 文件。我在单个部分中阅读了 TIniFile class has 64kb limit。但是,在我的测试中,它似乎可以处理超过 100kb 的文件。我正在使用 Delphi 10.3.3 和 Windows 10.
64kb 的限制是否只存在于旧版本的Windows?或者,我应该使用 TMemIniFile 来保证安全吗?
基本上,ini文件或例程GetPrivateProfileString
(TIniFile
用来读取数据)的大小没有限制。
但是在使用 TIniFile
.
查看 TIniFile
实现的代码(谢谢 Delphi),有几个地方 GetPrivateProfileString
用于从 ini 文件中检索数据。
在 TIniFile.ReadString
中,缓冲区大小固定为 2048 (2k),用于读取字符串值。
由于所有其他 'value' 请求例程使用此例程实际从 ini 文件中读取数据,它基本上限制了所有这些例程的缓冲区大小。
其次,TIniFile.ReadSections
例程使用 16384 (16k) 个字符的起始缓冲区。但是当这个缓冲区太小时,它会使用一个基于文件大小的动态缓冲区,所以这样你就不会 运行 陷入缓冲区问题(但因为这实际上是读取整个文件来估计缓冲区大小,对于大的 ini 文件,这将非常慢)。
最后,TIniFile.ReadSection
例程,它使用 1024 (1k) 的初始缓冲区大小。但在需要时动态分配更大的缓冲区。所以在这一点上,(文件)大小似乎也没有限制。
注意:此信息基于 Delhi 10.3 和 Delphi XE2。 在旧版本中,我们还有其他缓冲区分配策略...