Files
QTradeProgram/cleaned_source_code/Sqbase/OptimizationTest.cpp
2026-02-25 23:01:42 +08:00

145 lines
5.8 KiB
C++

#include "qorderprocessor.h"
#include "OrderBookParser.h"
#include "ObjectPool.h"
#include <QCoreApplication>
#include <QDebug>
#include <QElapsedTimer>
class OptimizationTest {
public:
static void runTests() {
qDebug() << "=== QTradeProgram 优化测试 ===";
testObjectPool();
testOrderBookParser();
testQOrderProcessor();
qDebug() << "=== 优化测试完成 ===";
}
private:
static void testObjectPool() {
qDebug() << "\n1. 对象池测试:";
BigOrderInfoPool& pool = BigOrderInfoPool::instance();
qDebug() << "初始池大小:" << pool.poolSize();
QVector<QSharedPointer<BigOrderInfo>> objects;
QElapsedTimer timer;
timer.start();
for (int i = 0; i < 1000; ++i) {
auto obj = pool.acquire();
obj->code = QString("TEST%1").arg(i);
obj->volume = i * 100.0;
objects.append(obj);
}
qint64 elapsed = timer.elapsed();
qDebug() << "创建1000个对象耗时:" << elapsed << "ms";
qDebug() << "池大小:" << pool.poolSize();
qDebug() << "总创建对象数:" << pool.totalCreated();
objects.clear();
qDebug() << "释放后池大小:" << pool.poolSize();
}
static void testOrderBookParser() {
qDebug() << "\n2. OrderBookParser 优化测试:";
OrderBookParser parser;
OrderBookData data;
Qot_UpdateOrderBook::Response response;
auto* s2c = response.mutable_s2c();
s2c->set_name("测试股票");
s2c->mutable_security()->set_code("000001");
s2c->set_svrrecvtimeask("2025-01-01 09:30:00");
s2c->set_svrrecvtimebid("2025-01-01 09:30:00");
for (int i = 0; i < 10; ++i) {
auto* bid = s2c->add_orderbookbidlist();
bid->set_price(10.0 + i * 0.1);
bid->set_volume(i * 1000.0);
bid->set_oredercount(1);
auto* detail = bid->add_detaillist();
detail->set_orderid(1000 + i);
detail->set_volume(i * 1000.0);
}
for (int i = 0; i < 10; ++i) {
auto* ask = s2c->add_orderbookasklist();
ask->set_price(11.0 + i * 0.1);
ask->set_volume(i * 800.0);
ask->set_oredercount(1);
auto* detail = ask->add_detaillist();
detail->set_orderid(2000 + i);
detail->set_volume(i * 800.0);
}
QElapsedTimer timer;
timer.start();
std::string serialized = response.SerializeAsString();
bool success = parser.parse(serialized.c_str(), serialized.size(), data);
qint64 elapsed = timer.elapsed();
qDebug() << "解析耗时:" << elapsed << "ms";
qDebug() << "解析结果:" << (success ? "成功" : "失败");
qDebug() << "股票代码:" << data.code;
qDebug() << "买盘数量:" << data.bids.size();
qDebug() << "卖盘数量:" << data.asks.size();
}
static void testQOrderProcessor() {
qDebug() << "\n3. QOrderProcessor 优化测试:";
QOrderProcessor processor;
QMap<QString, float> thresholds;
thresholds["000001"] = 5000.0f;
processor.setreplyCodeQuantity(thresholds);
OrderBookData testData;
testData.code = "000001";
testData.name = "测试股票";
testData.askTime = "2025-01-01 09:30:00";
testData.bidTime = "2025-01-01 09:30:00";
OrderBookEntry bigOrder;
bigOrder.price = 10.5;
bigOrder.volume = 10000.0;
bigOrder.orderCount = 1;
OrderDetail bigDetail;
bigDetail.orderId = 9999;
bigDetail.volume = 10000.0;
bigOrder.details.append(bigDetail);
testData.asks.append(bigOrder);
QElapsedTimer timer;
timer.start();
for (int i = 0; i < 100; ++i) {
auto result = processor.findExtremeOrders(testData);
if (i == 0) {
qDebug() << "首次检测到大单数量:" << result.size();
if (!result.isEmpty()) {
qDebug() << "大单信息 - 订单ID:" << result[0].orderId
<< "数量:" << result[0].volume;
}
}
}
qint64 elapsed = timer.elapsed();
qDebug() << "100次检测耗时:" << elapsed << "ms";
qDebug() << "缓存命中率:" << processor.getCacheHitRatio() * 100 << "%";
qDebug() << "缓存命中次数:" << processor.getCacheHitRate();
qDebug() << "缓存未命中次数:" << processor.getCacheMissRate();
}
};
void demonstrateMemoryMonitoring() {
qDebug() << "\n4. 内存监控演示:";
#define MEMORY_TRACKING
#include "ObjectPool.h"
MemoryMonitor& monitor = MemoryMonitor::instance();
monitor.setMemoryThreshold(50 * 1024 * 1024);
TRACK_MEMORY_ALLOC(1024 * 1024, "OrderBookData");
TRACK_MEMORY_ALLOC(512 * 1024, "BigOrderInfo");
auto usage = monitor.getMemoryUsage();
qDebug() << "当前内存使用情况:";
for (auto it = usage.begin(); it != usage.end(); ++it) {
if (it.value() > 0) {
qDebug() << " " << it.key() << ":" << it.value() / 1024.0 << "KB";
}
}
qDebug() << "总内存使用:" << monitor.getTotalMemoryUsage() / (1024.0 * 1024.0) << "MB";
}
int main(int argc, char *argv[]) {
QCoreApplication app(argc, argv);
qDebug() << "开始执行优化测试...";
OptimizationTest::runTests();
demonstrateMemoryMonitoring();
qDebug() << "\n=== 所有测试完成 ===";
qDebug() << "优化总结:";
qDebug() << "- 对象池模式减少内存分配开销";
qDebug() << "- 数据预处理提高数据质量";
qDebug() << "- 缓存机制避免重复计算";
qDebug() << "- 并行处理提升处理速度";
qDebug() << "- 内存监控防止内存泄漏";
return 0;
}