我在ColdFusion中编写了一个数据库加载脚本,我遇到了一个问题,即脚本内存缓慢耗尽.我用<cfthread>将每个表加载分成自己的线程,当内存下降到50%以下时我调用垃圾收集器(确保在gc()调用之间有30秒以防止垃圾收集器占用内存) .
我创建了一个CFC来保存脚本所需的所有查询.该脚本调用适当的CFC函数,然后返回查询,其中一些查询大小超过2 MB.当我在活动线程的内存页面的详细信息视图中查看服务器监视器时,看起来我的CFC在内存中保留了查询的副本,即使我对查询变量进行了操作并且变量在最后超出了范围功能.另外,我在我的帖子中有一个内存查询的副本.所以我在内存中留下了两个查询副本.这真的发生了什么?如果是,我如何从内存中删除一个查询副本?
Sha*_*son 11
这里有很多潜在的问题,但我会尝试强调一些最重要的事情供你考虑:
查询可能会从cfreturn语句返回指向查询的指针.在完成引用它的所有进程之前,不会清除该查询.因此,如果它将查询传递给其他进程,则不会将查询清除内存.例如,如果将该查询设置为会话变量,则该指针在该会话变量消失之前不会移动到任何地方,无论您尝试强制垃圾收集的频率如何.
只需要考虑几件事情.