【发布时间】:2013-02-01 00:11:02
【问题描述】:
我有一个函数来获取文件的 FileSize。我在 WinCE 上运行它。这是我当前的代码,看起来特别慢
int Directory::GetFileSize(const std::string &filepath)
{
int filesize = -1;
#ifdef linux
struct stat fileStats;
if(stat(filepath.c_str(), &fileStats) != -1)
filesize = fileStats.st_size;
#else
std::wstring widePath;
Unicode::AnsiToUnicode(widePath, filepath);
HANDLE hFile = CreateFile(widePath.c_str(), 0, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if (hFile > 0)
{
filesize = ::GetFileSize( hFile, NULL);
}
CloseHandle(hFile);
#endif
return filesize;
}
【问题讨论】:
-
您可能想确认这是实际的慢代码位。我看不出有什么特别的原因,除非你的文件系统包含大量文件[因此,搜索所有文件需要一段时间才能打开它]。
-
@MatsPetersson 你说得有道理,当我发布这个时,我意识到它可能是 UnicodeToAnsi 函数,因为它涉及字符串操作。我重构了代码以减少这些代码的使用,并且已经将速度提高了 30%
-
如果您正在执行“许多”AnsiToUnicode 调用,您可能需要构建一个缓存来检查您是否已经完成了此文件并返回前一个文件...一些散列可能会有所帮助。跨度>
标签: c++ optimization windows-ce