Я настраиваю класс логгера и хочу оптимизировать логирование.Это должен быть многоцветный логгер, поэтому std :: string :: append (...) не является опцией.
Добавление нового журнала в вектор строк не очень хорошая идея, потому что увеличивается каждая память push_backи fps понижается.Я подумал создать Log
структуру, которая будет содержать string msg
и color
или flag
, которые сообщат нам, что это за сообщение, и двойной буфер Log
структура.Напишите первый, затем передайте его второму Log
объекту и извлеките его, затем очистите первый Log
объект ... и так далее.Я пытался реализовать это, но это не работает так, как я хочу.
В данный момент я оставил вектор Logs
class Logger
{
public:
struct Log {
std::string text;
Uint color;
}
void Draw() {
for(const auto& log : logs) {
renderer->DrawString(log.text, log.color);
}
}
void AddLog(const std::string& text, Uint color) {
logs.emplace_back(text, color);
}
std::vector<Log> logs;
};
int main() {
//window stuff, opengl context, etc.
Logger logger;
while(!quit) {
// Do not flood logger with logs, just add it sometimes
static double lastTime = -1.0;
if(time - lastTime >= 0.20f) {
logger.AddLog("Log", 0xff00ffff);
lastTime = time;
}
logger.Draw();
}
return 0;
}
мы не передаем позицию в renderere->DrawString(...)
,потому что он автоматически перемещается вниз на другую строку.
Этот подход работает, но с очень, очень, очень, очень, очень плохой скоростью.
Как я могу его оптимизировать?Я хотел бы получить что-то вроде консоли CS.Это также многоцветный регистратор, который может записывать массивные сообщения без потери fps.