我得到一個程序,需要檢查一個文件的塊是歸零還是有數據。這個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;
}
這個算法看起來有點「蠻力」。有沒有一種很好的方法來確定接下來的n個字節是否會有值?如果不是,這可能是您最好的選擇(除了在文件中讀取時可能發生的文件爭用)。 – 2009-06-01 04:49:54
也許你的程序可能會假設塊沒有被清除,除非明確這麼做?我的意思是,如果一個塊需要清除,你的程序可以注意到這一點並清除數據(並且注意塊清楚)。我想我只是好奇你爲什麼想首先解決這個問題。 – 2009-06-01 05:00:06
這裏的「真正的」問題是爲什麼你需要首先掃描文件爲零。也許你可以重新設計你的系統,這樣就不需要這種無用的掃描,而不是試圖提高速度。 – lothar 2009-06-01 16:23:48