我們使用以下方法將日誌寫入日誌文件。日誌條目保存在一個名爲m_LogList的向量中(stl字符串條目保存在向量中)。當矢量的大小超過100時調用該方法。如果我們調用FlushLog方法,Log服務器的CPU利用率大約爲20-40%。如果我們註釋掉FlushLog方法,CPU利用率會下降到10-20%的範圍。
我可以使用哪些優化來降低CPU利用率?我們使用fstream的對象寫日誌記錄到文件CPU利用率高
void CLogFileWriter::FlushLog()
{
CRCCriticalSectionLock lock(m_pFileCriticalSection);
//Entire content of the vector are writing to the file
if(0 < m_LogList.size())
{
for (int i = 0; i < (int)m_LogList.size(); ++i)
{
m_ofstreamLogFile << m_LogList[i].c_str()<<endl;
m_nSize = m_ofstreamLogFile.tellp();
if(m_pLogMngr->NeedsToBackupFile(m_nSize))
{
// Backup the log file
}
}
m_ofstreamLogFile.flush();
m_LogList.clear(); //Clearing the content of the Log List
}
}
調用矢量「列表」有點令人誤解。 – MSalters 2012-03-29 12:32:04
如果你的CPU利用率增加了這麼多,你必須有一臺有限的機器,或者你經常調用FlushLog?製作關鍵部分相當昂貴,但我認爲這是您需要的。 – Rolle 2012-03-29 12:40:34