EA运行一段时间后内存占用很高

神帖很热88.9
登录发帖
Exness 推荐平台

入金门槛低,出金到账快,支持多种账户类型

FSA(塞舌尔)/FCA(英国) / CySEC(塞浦路斯) · 最低入金 $130
QuietMaple
QuietMaple 楼主 2026-8-21 15:56:07 浏览 599 回复 10 阅读 1 分钟
新汇友(注册会员) 等级 Lv.1 主题 3 帖数 10 积分 777 汇币 288
1楼
我的EA跑了大概一周,昨晚看任务管理器吓了一跳,内存占用直接飙到1.2G,刚挂上去的时候才200M出头。我用的还是MT4,就一个欧美品种,没开太多图表,搞不懂为啥会涨这么猛。
我试过把EA重新加载一次,内存会降下来一些,但过几个小时又慢慢涨回去。还以为是指标太多,删了几个自定义指标也没用。后来在论坛看到有人说可能是
  • 历史数据缓存没清理
  • EA里循环没写对,有泄漏
  • MT4本身优化问题
我这EA是别人给的,代码我看不太懂,但里面确实有几个while循环,不知道是不是跟这个有关。
有个汇友说可以用内存分析工具查具体是哪个函数占资源,但我下载了个Process Explorer,看半天也看不懂哪个是EA的线程。想问下大家,这种情况一般是EA代码问题还是MT4平台的问题啊?要是代码问题,我得回去找写EA的人改,要是平台问题我就换个VPS试试。有没有大佬遇到过类似的,求指点一下,谢谢了!

补一句:刚才又试了下,把MT4的日志和报价历史手动清空,内存确实稳住了,但EA一跑又慢慢往上爬,感觉大概率还是EA代码里循环那块的问题。
3 回复 众裁0 复制
#1
午后微光
午后微光 #2· 2026-8-23 10:01:55
2楼
“历史数据缓存没清理”这个点确实提醒到我了,我自己也遇到过类似问题,清空日志后内存稳住但一跑就涨,八成是while循环里没写退出条件,建议你用Tick数据逐根调试一下。
赞 回复 众裁0 复制
2026-8-23 10:01:55 #2
竹间听风
竹间听风 #3· 2026-8-23 14:00:42
3楼
我自己也碰到过内存涨到1G的情况,清缓存没用,最后发现是while循环里没加Sleep。你这EA代码别人给的,还是让他检查下循环退出条件吧!
赞 回复 众裁0 复制
2026-8-23 14:00:42 #3
且听风吟
且听风吟 #4· 2026-8-23 14:06:34
4楼
问题核心大概率是EA代码里的while循环缺少退出条件或Sleep,MT4缓存只是表象。建议:1) 用MT4自带的Debug模式单步跟踪循环,设个最大迭代次数;2) 检查是否有数组或字符串在循环内不断拼接。补充下,Process Explorer要看线程栈,搜EA名称或dll加载项,别只看内存排序。尽量让写码的人加个GC或定时重置内存池。
赞 回复 众裁0 复制
2026-8-23 14:06:34 #4
WildWindv
WildWindv #5· 2026-8-23 15:24:09
5楼
1.2G确实有点离谱,我跑过类似的EA也没这么夸张。你那个while循环里有没有数组在反复初始化?我之前遇到的泄漏就是这样,每次tick都新建数组又不清空,内存就一路爬。你可以让写EA的试试加个数组清零或者改用固定大小数组。Process Explorer看不懂的话,直接看MT4日志里的memory列也行。
赞 回复 众裁0 复制
2026-8-23 15:24:09 #5
K线画师
K线画师 #6· 2026-8-23 20:11:05
6楼
1.2G确实不太正常,但清缓存能稳住说明平台层没问题,核心还是EA循环那块。建议你让写EA的查一下while里是否用了iTime这类函数拉历史数据,或者new了个对象没delete。顺便补充一下:Process Explorer看线程CPU占用率,哪个高多半就是哪个卡不住了。
赞 回复 众裁0 复制
2026-8-23 20:11:05 #6
mashuang8754
mashuang8754 #7· 2026-8-24 15:04:37
7楼
楼上各位都指向while循环,不过我觉得还有个容易忽略的坑:MT4的Market Watch里如果挂了一堆品种的报价订阅,即使没开图表也会吃内存。我上次也是EA跑一周涨到900M,清缓存没用,最后发现是EA里有个对SymbolInfoDouble的循环调用没限频,每次tick都全品种轮询一遍。你用Process Explorer看下CPU占用是不是有规律的尖峰,如果是那就是EA在疯狂拉数据,让写代码的加个计时器限制查询频率就行。
赞 回复 众裁0 复制
2026-8-24 15:04:37 #7
大勇哥
大勇哥 #8· 2026-8-24 15:08:13
8楼
看到你清缓存后EA一跑又涨,基本就是while循环里泄漏。我好奇你EA循环里有没有用ObjectCreate画线?我之前就是这函数忘删,内存涨得跟你一模一样。
赞 回复 众裁0 复制
2026-8-24 15:08:13 #8
量化部署老张
量化部署老张 #9· 2026-9-5 10:26:42
9楼
看下来你这问题核心就是while循环内存泄漏,日志清理只是暂时缓解,EA一跑照样涨就说明平台背锅可能性不大。建议先让写EA的人查循环里有没有动态数组或字符串反复拼接没释放。补充下:可以用MT4的策略测试器跑几天模拟,观察内存变化,比Process Explorer直观多了。要是循环里有Sleep,也得确认退出条件写没写对。
赞 回复 众裁0 复制
2026-9-5 10:26:42 #9
月下独酌
月下独酌 #10· 2026-9-7 22:14:06
10楼
Process Explorer确实不好分辨EA线程,但看你这情况基本就是循环里泄漏没跑。补充下:让写EA的查下while里有没有频繁调用OrderSend或刷新历史数据,这俩函数最吃内存。另外可以挂个定时重启EA,治标但也算应急方案 😂
赞 回复 众裁0 复制
2026-9-7 22:14:06 #10
THE END
本帖内容仅供学习交流,不构成任何投资建议。外汇交易存在高风险,请谨慎参与。
← 上一帖 MT4和MT5哪个更适合新手,有人遇到过吗? 下一帖 → 新手求助:止损总是被打掉怎么办