1
我知道这个answer,它解释了什么设置lazy =“extra”。nHibernate集合lazy =“extra” - 为什么我们不使用它?
我的问题是,是否有使用lazy =“extra”的相关费用?为什么我们不会只为每个实例设置lazy =“extra”,否则我们会将其设置为“true”?它看起来与“真实”一样,但更好?
我知道这个answer,它解释了什么设置lazy =“extra”。nHibernate集合lazy =“extra” - 为什么我们不使用它?
我的问题是,是否有使用lazy =“extra”的相关费用?为什么我们不会只为每个实例设置lazy =“extra”,否则我们会将其设置为“true”?它看起来与“真实”一样,但更好?
我能想到的唯一情况是,如果一个集合主要用作数据源或循环迭代,那么首次访问任何属性(甚至是Count
)时获取完整集合会更好。
否则,您可能会最终执行更多查询而不是必要的。
例如
bool found = false;
int pos = 0;
while (!found && pos < Collection.Count)
{
if (MyFunction(Collection[pos]))
{
found = true;
}
pos++;
}
是的,这是有道理的,所以当你有一个肯定会一个电话.Count中后使用的集合,然后你会设置为lazy =“真”之前保存的计数的SQL查询使用它。 我仍然认为这样做的成本远低于潜在成本。所以不是默认的做法是总是设置lazy =“extra”,并且只有在你知道你会需要该集合的情况下,为这些情况设置lazy =“true”? – syclee 2012-03-22 01:02:22
我想说它将取决于集合的大小。如果它很大,我认为值得使用lazy = extra,因为与构建整个集合相比,count操作的代价是微不足道的。还没有找到NH引用,但Hibernate文档说,循环中的每个项目访问都会生成一个查询(根据需要加载项目) – 2012-03-22 12:37:20