【发布时间】:2014-08-04 07:58:40
【问题描述】:
好的,
我使用此函数在我的程序中获取文件大小,即使对于 4GB 以上的文件,它也能正常工作。
function FileSize(const PathtoFile: string): Int64;
var
AttributeData: TWin32FileAttributeData;
begin
if GetFileAttributesEx(PChar(PathtoFile), GetFileExInfoStandard,
@AttributeData) then
begin
Int64Rec(Result).Lo := AttributeData.nFileSizeLow;
Int64Rec(Result).Hi := AttributeData.nFileSizeHigh;
end
else
Result := -1;
end;
现在,问题是当使用 AQTime Standard 分析我的应用程序时,我发现我的程序在获取大约 4758 Files 的文件大小时在此函数中花费了大约 35 Secs,而我在处理时的时间是 GetFileAttribute Function Spends which is about 5 Secs相同数量的文件。
请问有什么代码可以代替我当前的代码(即使它是 ASM)来加快操作速度。
【问题讨论】:
-
文件都在同一个目录吗?如果是这样,Windows 本身就会在单个目录中出现大量 (4K) 文件的问题。文件是否位于网络驱动器上?您还可能遇到网络延迟问题。我针对 FindFirstFileEx 测试了您的代码,并且返回网络驱动器上单个文件的大小对于这两个函数花费了完全相同的时间(3 毫秒);根据 TStopWatch 计时,使用本地文件进行测试需要 0 毫秒。
-
目录中的文件大小不一。
标签: delphi