Wir verwenden die folgende Methode, um das Protokoll in die Protokolldatei zu schreiben. Die Protokolleinträge werden in einem Vektor mit dem Namen m_LogList (strl-Einträge werden im Vektor beibehalten) gespeichert. Die Methode wird aufgerufen, wenn die Größe des Vektors mehr als 100 beträgt. Die CPU-Auslastung des Log-Servers liegt bei 20-40%, wenn wir die FlushLog-Methode aufrufen. Wenn wir die FlushLog-Methode auskommentieren, sinkt die CPU-Auslastung auf 10-20%.
Welche Optimierungen kann ich verwenden, um die CPU-Auslastung zu reduzieren? Wir verwenden fstream Objekt für die Protokolleinträge zu schreibenCPU-Auslastung hoch
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
}
}
Das Aufrufen eines Vektors "Liste" ist ein bisschen irreführend. – MSalters
Wenn Ihre CPU-Auslastung so stark ansteigt, müssen Sie entweder eine begrenzte Maschine haben oder FlushLog anrufen? Einen kritischen Abschnitt zu erstellen ist ziemlich teuer, aber ich nehme an, dass es in Ihrem Fall benötigt wird. – Rolle