我在我的应用程序中安装了一个简单的 QtMessageHandler:
void handleMessage(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
QString text = msg;
QString path = QCoreApplication::applicationDirPath() + "/logging/logs.txt";
QFile logFile(path);
logFile.open(QIODevice::WriteOnly | QIODevice::Append);
QTextStream textStream(&logFile);
textStream<< text << endl << flush;
}
int main(int argc, char *argv[])
{
qInstallMessageHandler(handleMessage);
// ...
for (int i = 0; i < 10000000; i++) {
qDebug() << "Some text";
}
// ...
}
现在,当我使用 qDebug 将一些日志写入日志文件时(应用程序什么也不做!),内存使用量正在上升。当我停止写日志时,它会回落,但永远不会回到以前的值。每几千条消息,内存就会增加几百千字节并保持不变。
我认为是 QTextStream 导致了这种情况,因为如果我将那部分注释掉,那么内存使用率就会很低。
我尝试将 myMessageHandler 函数移动到一个单独的类并将 QTextStream 作为成员变量,而不是在每次调用 myMessageHandler() 时创建它,但是我无法让 qInstallMessageHandler() 工作。
int main(int argc, char *argv[])
{
MyMessageHandler myMessageHandler;
qInstallMessageHandler(myMessageHandler.handleMessage);
}
这给了我:
cannot convert 'MyMessageHandler::handleMessage' from type 'void (MyMessageHandler::)(QtMsgType, const QMessageLogContext&, const QString&)' to type 'QtMessageHandler {aka void (*)(QtMsgType, const QMessageLogContext&, const QString&)}'qInstallMessageHandler(myMessageHandler.handleMessage);
任何人都知道如何解决这个问题?