我的程序使用TIniFile操作ini文件。我在一节中读过TIniFile类有64 has的限制。然而,在我的测试中,它的工作时间似乎超过了100 my。我使用的是Delphi 10.3.3和Windows 10。
64 of限制只存在于旧版本的Windows中吗?或者,我应该使用TMemIniFile来保持安全吗?
发布于 2021-01-24 12:44:28
基本上,ini文件或例程GetPrivateProfileString ( TIniFile用于读取数据)的大小没有限制。但是在使用TIniFile时有一些限制和需要考虑的问题。
查看TIniFile实现的代码(谢谢德尔菲),有几个地方使用GetPrivateProfileString从ini文件中检索数据。
在TIniFile.ReadString中,用于读取字符串值的缓冲区大小固定为2048 (2k)。由于所有其他“值”请求例程使用此例程实际从inifile读取数据,因此它基本上限制了所有这些例程的缓冲区大小。
其次,TIniFile.ReadSections例程使用16384 (16k)字符的启动缓冲区。但是,当这个缓冲区太小时,它使用了一个基于文件大小的动态缓冲区,因此这样您就不会遇到缓冲区问题(但是由于实际读取整个文件来估计缓冲区大小,这对于大型ini文件来说将非常慢)。
最后是TIniFile.ReadSection例程,它使用1024 (1k)的初始缓冲区大小。但在需要时动态地分配更大的缓冲区。因此,在这一点上,似乎也没有限制(文件)大小。
注意事项:此信息基于德里10.3和德尔菲XE2。在旧版本中,我们有其他缓冲区分配策略..。
https://stackoverflow.com/questions/65852003
复制相似问题