报告策略测试器中的内存泄漏 - MetaTrader 5 库
策略测试器不会报告 MQL5 应用程序(例如专家顾问、脚本或指标)的任何内存泄漏。并且使用以下方法可能会发生此类内存泄漏 新的在您的 MQL5 代码中使用运算符,并忘记稍后在代码中通过调用来释放占用的内存 删除 操作员。例如,在具有许多类和数据集合的复杂程序中,必须使用 删除 操作员很容易被监督,但此类问题很难追踪。
在我看来,策略测试器不仅应该用于开发连贯的交易逻辑,还应该用于检测与软件相关的问题。特别是对于查找内存泄漏。此类问题越早发现并解决越好。
因此,这里提供了一个名为“checker_for_memory_leaks”的包含文件。多米尼克·艾格特对此文件做出了重大贡献;请看https://www.mql5.com/en/forum/438987
该头文件可用于 Expert Advisor、脚本和自定义指标,并且应包含在代码的最开头。目的是在策略测试器中测试应用程序期间监视最终发生的内存泄漏。否则无需更改实际代码。头文件中的运算符 新的 和 删除 被“弯曲”以指示最终发生的泄漏。在彻底测试您的应用程序并修复所有内存泄漏后,您只需取消注释/删除 #include
作为一个例子,这里有一个非常简单的脚本,名为“内存泄漏.mq5“使用此标头显示:
#包括//+------------------------------------------------------------------+ //|没有任何内容的简单 CA 类 | //+------------------------------------------------------------------+ 班级CA {};空白 启动时() { CA*a; 一个=新的加州; 如果(一个==无效的) { 打印(“空指针!”); 返回; }// ‘忘记’调用删除操作符” // 删除一个; }//+------------------------------------------------------------------+
输出:
2023.08。12 11:45:26.072MemoryLeak (.DE40Cash,M15) -- 恢复内存泄漏 --2023.08。12 11:45:26.072内存泄漏(.DE40Cash,M15) 1留下未删除的对象2023.08。12 11:45:26.072MemoryLeak (.DE40Cash,M15) - 文件 MemoryLeak.mq5 行10 2023.08。12 11:45:26.072MemoryLeak (.DE40Cash,M15) -- 简历结束 --
您可以看到内存已分配在哪个文件和哪一行。此信息应该使调试更容易找到程序中应发生内存释放的正确位置
附件下载
📎 checker_for_memory_leaks.mqh (2.27 KB)
📎 memoryleak.mq5 (0.52 KB)
Source: MQL5 #45873
💡 精彩内容推荐
✍️ 楼主最新发布
- •
- •
- •
- •
- •
- •
🔗 您可能感兴趣
- •
- •
- •
- •
- •
- •
🔐
请登录后参与评论
注册满12小时后评论,即可解锁附件下载
立即登录
