#include "qorderprocessor.h" #include "OrderBookParser.h" #include "ObjectPool.h" #include #include #include 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> 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 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; }