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