我们使用以下方法将日志写入日志文件。日志条目保存在一个名为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