次の方法を使用してログをログファイルに書き込みます。ログエントリは、m_LogListという名前のベクトルに保持されます(stl文字列エントリはベクトルに保持されます)。このメソッドは、ベクトルのサイズが100を超えると呼び出されます.FlushLogメソッドを呼び出すと、LogサーバーのCPU使用率は約20-40%になります。 FlushLogメソッドをコメントアウトすると、CPU使用率は10〜20%の範囲に低下します。
CPU使用率を下げるためにどのような最適化を使用できますか?私たちは、私が使用したい最初の最適化が<< m_LogList[i].c_str()
で.c_str()
をドロップすることです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
}
}
ベクトル "list"を呼び出すのは少し誤解を招くことです。 – MSalters
CPU使用率がこれ以上上昇する場合は、マシンが限られているか、FlushLogをかなり頻繁に呼び出す必要がありますか?クリティカルセクションを作成するのは非常に面倒ですが、私はそれが必要であると想定しています。 – Rolle