我有一个程序,需要检查文件的大块是否归零或有数据.这个alg运行整个文件的大小达到几个演出并需要一段时间才能运行.有没有更好的方法来检查它是否归零?
平台:Linux和Windows
bool WGTController::isBlockCompleted(wgBlock* block)
{
if (!block)
return false;
uint32 bufSize = (uint32)block->size;
uint64 fileSize = UTIL::FS::UTIL_getFileSize(m_szFile);
if (fileSize < (block->size + block->fileOffset))
return false;
char* buffer = new char[bufSize];
FHANDLE fh=NULL;
try
{
fh = UTIL::FS::UTIL_openFile(m_szFile, UTIL::FS::FILE_READ);
UTIL::FS::UTIL_seekFile(fh, block->fileOffset);
UTIL::FS::UTIL_readFile(fh, buffer, bufSize);
UTIL::FS::UTIL_closeFile(fh);
}
catch (gcException &)
{
SAFE_DELETEA(buffer);
UTIL::FS::UTIL_closeFile(fh);
return false;
}
bool res = false;
for (uint32 x=0; x<bufSize; x++)
{
if (buffer[x] != 0)
{
res = true;
break;
}
}
SAFE_DELETEA(buffer);
return res;
}
Run Code Online (Sandbox Code Playgroud)
一段时间多久了?...我想尝试比较尽可能多的并行值会有所帮助,也许可以使用一些SIMD指令一次比较4个以上的字节?
但请记住,无论您进行比较的速度有多快,最终仍需要从文件中读取数据.如果文件尚未位于内存中的某个高速缓存中,则在磁盘带宽饱和之前,最大可能限制为100-150 MB/s.如果您已经达到了这一点,那么您可能首先需要查看一种避免必须加载文件的方法,或者只是接受它不会比这更快的事实.