Update 更新文档
This commit is contained in:
145
cleaned_source_code/Sqbase/OptimizationTest.cpp
Normal file
145
cleaned_source_code/Sqbase/OptimizationTest.cpp
Normal file
@@ -0,0 +1,145 @@
|
||||
#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;
|
||||
}
|
||||
Reference in New Issue
Block a user