我只是测试crossfilter的某些方面。我创建了一个名为typeDim的维度,然后运行typeDim.dispose()。该命令正在运行,因为当我在typeDim之前创建31维时,dispose命令为额外的一个创建空间。但是当我在处理之后运行console.log(typeDim.top(3))时,仍会打印出三个事实。我原以为会出错。
var typeDimension = facts.dimension(function(d){ return d.type; });
typeDimension.dispose();
console.log(typeDimension.top(3));
输出:
[Object,Object,Object]
有没有人知道为什么我在处理后仍然可以访问typeDim?感谢
答案 0 :(得分:1)
当您处理Crossfilter维度时,应该处理Crossfilter中对维度的所有引用,这将允许浏览器的垃圾收集删除维度对象。 Crossfilter内部过滤器阵列中尺寸的列也将被删除。但是,如果您保留对尺寸的引用,则不会删除尺寸对象。
脱离我的头脑,这意味着一些事情:
dimension.top
和dimension.bottom
仍会返回值。dimension.filter
不应再对此维度的Crossfilter产生任何影响。当您处理维度时,最好也尝试删除对您自己的代码中的维度帮助的任何引用,以便系统可以垃圾收集所有维度对象。如果你不这样做,你将最终得到本质上是内存泄漏的内容,但在实际内存不足之前它不应再影响你的Crossfilter。