4

在处理嵌套的 ORM 关系时,使用cfdumpwriteDump会迅速导致java.lang.OutOfMemoryError错误,因为 CF 试图解析嵌套对象中的关系并转储太多对象。

这可以通过top属性来避免,例如:<cfdump var=#SomeObject# top=3 />

记住一直写这个很痛苦 - 有没有办法配置 CF 在处理 ORM 对象时不会下降太多级别?

4

1 回答 1

5

似乎没有任何管理员设置。(提出的问题

一个不完美的解决方案是通过重命名{cfusion}/wwwroot/WEB-INF/cftags/dump.cfm为(例如)origdump.cfm然后创建一个dump.cfm包含以下内容的新文件来为 cfdump 标签创建一个包装器:

<cfif isObject(attributes.var) AND NOT StructKeyExists(attributes,'top')>
    <cfset attributes.top = 3 />
</cfif>

<cforigdump attributecollection=#attributes# />

<cfexit method="exitTag" />

幸运的是,writeDump 函数将调用这个包装器(因此它适用于标签和函数)。

不幸的是,包装器没有被递归调用——如果 ORM 对象在结构或数组中,那么原始问题仍然会表现出来——可以预扫描复杂变量以确定内部是否存在关系并设置适当的最高值,但是这样只能实现有限的解决方案(即它会影响相邻的结构/数组)。

于 2013-08-05T10:05:59.930 回答