Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/53.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Grails-GORM方法的内存使用_Grails_Gorm - Fatal编程技术网

Grails-GORM方法的内存使用

Grails-GORM方法的内存使用,grails,gorm,Grails,Gorm,我想知道grails是如何通过GORM方法处理内存使用和域对象的加载(获取)的,比如: findAllWhere findAllBy list ... 它们(分别是它们的代理)是否已完全加载到内存中 如果我用each/every/any遍历它们,它们是否有一个迭代器支持惰性加载它们 我应该更喜欢createCriteria(){…}.scroll()以获得更好的内存使用率吗 假设我们忽略GORM使用的每种类型的DB驱动程序的不同行为,我们可以在代码和文档中找到答案 动态查找程序由org.gr

我想知道grails是如何通过GORM方法处理内存使用和域对象的加载(获取)的,比如:

findAllWhere
findAllBy
list
...
  • 它们(分别是它们的代理)是否已完全加载到内存中
  • 如果我用
    each/every/any
    遍历它们,它们是否有一个迭代器支持惰性加载它们
  • 我应该更喜欢
    createCriteria(){…}.scroll()
    以获得更好的内存使用率吗

假设我们忽略GORM使用的每种类型的DB驱动程序的不同行为,我们可以在代码和文档中找到答案

动态查找程序由
org.grails.datastore.gorm.GormStaticApi
org.grails.datastore.gorm.finders
包中的查找程序类提供给域类

回顾这些类,我们可以看到返回多个结果的查询总是作为
DetachedCriteria
进行组合,并且总是调用
criteria.list()
方法
;这意味着整个结果批被组装并保存在内存中。使用Groovy的collection方法遍历结果不会有任何区别,因为您实际上是在调用返回结果列表上的那些方法

至于问题“加载了多少结果域?”——这取决于域的组成,但您可以假设域的字段已加载,并且默认情况下任何关联都是惰性的

在需要更好的内存使用的场景中,您当然可以结合结果预测自行编写标准,并使用
滚动
(请注意,此功能取决于数据库的类型)


在极端情况下,我甚至会绕过GORM,直接使用DB驱动程序。

您使用哪个DB来支持GORM?比如说预打包的DB的HSQL或H2。但我希望GORM不是依赖于db的…好吧,它不能是独立的,因为它必须使用db驱动程序与不同的DBs接口。例如,GORM使用Mongo Java驱动程序与MongoDB接口,并使用Jedis与Redis接口。除此之外,还有Spring数据框架。