我试图加快应用的性能,并想知道使用instance.name
和instance.getName()
访问域名属性值是否存在差异
如果是,哪一个在性能方面最好?
实施例
class User {
String name
}
User user = User.get(100);
//is it better this way
user.name
//or this way
user.getName()
谢谢
答案 0 :(得分:2)
与您提供的用法无关,因为user.name
在幕后使用user.getName()
。所以它是一样的。如果您想直接访问属性,则必须使用@ {this user.@name
。查看更多here
但我不认为这是你加速应用程序的方式。
答案 1 :(得分:1)
您很可能会找到更简单的方法来提高代码的性能。如果您想提高性能,可以从以下一些想法开始。
A)查询数量。尽量避免N + 1问题。例如,如果一个用户拥有多个[events:Event],那么像user.events.each {access event.anyPropertyExceptId}这样的代码将为每个事件分派新的查询。
B)查询效率。默认情况下,Grails为所有gorm关联/其他嵌套域创建索引。无论您使用什么搜索,过滤等,都需要“手动”进行操作。
static mapping = {
anyDomainProperty index: 'customIndexName'
}
C)仅查询您感兴趣的数据,例如:
User.all.each { user ->
println user.events.size()
}
与
Event.withCriteria {
projections {
property('user')
countDistinct('id')
groupProperty('user')
}
}
D)如果你真的需要加速你的groovy代码而你的问题只是一个请求而不是一般的cpu使用,请看看http://gpars.codehaus.org和http://grails.org/doc/2.3.8/guide/async.html并尝试平行工作。< / p>
答案 2 :(得分:0)
我怀疑您的应用中的任何性能问题都与您访问域类属性的方式有关。事实上,如果你描述/测量你的应用程序,我相信你会看到这种情况。