我正在编写像ab这样的小程序来测试我的小型休息网络服务。我的应用程序每秒可以产生大约200-300个请求,但是ab可以大约8k-9k(在同一台机器上)。经过小规模调查后我发现了问题 - 如果我使用空的QByteArray,它可以快速运行。这是代码:
// simplesender.h
#ifndef SIMPLESENDER_H
#define SIMPLESENDER_H
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QQueue>
#include <QObject>
class SimpleSender : public QObject
{
Q_OBJECT
public:
explicit SimpleSender(QObject *parent = 0)
{
connect(&qnam, &QNetworkAccessManager::finished, this, &SimpleSender::slFinished);
url = QUrl("http://localhost:8080");
m_in_progress = 0;
sendHttpRequest();
}
private slots:
void slFinished(QNetworkReply *reply)
{
QByteArray b = reply->readAll();
Q_UNUSED(b);
m_in_progress--;
sendHttpRequest();
reply->deleteLater();
}
private:
int m_in_progress;
QUrl url;
QNetworkAccessManager qnam;
void sendHttpRequest()
{
while (m_in_progress < 10) {
QNetworkRequest r(url);
QByteArray bb = QByteArray("t"); // with this line 200 r/s
//QByteArray bb; // with this line 8k r/s
qnam.put(r, bb);
m_in_progress++;
}
}
};
#endif // SIMPLESENDER_H
在main.cpp
中#include <simplesender.h>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
SimpleSender hs(&a);
return a.exec();
}
我的问题是如何提高效果。