使用nhibernate时,如何在映射代码中找出最佳批量大小?

leo*_*ora 8 c# nhibernate fluent-nhibernate updatebatchsize

我正在使用nhibernate,我在映射区域中有这样的代码:

  HasMany(x => x.People).AsBag().Inverse().Cascade.AllDeleteOrphan().Fetch.Select().BatchSize(80); 
  HasMany(x => x.Clothes).AsBag().Inverse().Cascade.AllDeleteOrphan().Fetch.Select().BatchSize(150);
Run Code Online (Sandbox Code Playgroud)

我的问题是,我如何找出最佳值.BatchSize?我应该简单地说一个很高的数字.将数字设得太高会有不利之处吗?

Die*_*hon 6

这个问题没有一个答案.

确定哪种方法最有效的唯一方法是在生产中分析应用程序,真实用户在做真实的事情.这很费时间,所以只有当您发现应用程序运行缓慢时,您才可能会这样做

过高数字的风险是,具有大量参数的查询检索每个参数的记录范围可能在数据库上比一些较小的查询更难.

另外,如果你使用所有你所引用的集合(例如,如果您检索PostCategories的名单,但只显示帖子其中之一),你可能会不必要地加载大量的数据.

我的建议是从20或50(*)之类的东西开始,并且只有当你经常发现自己需要同时加载的集合数量的两倍以上时才使它更高.

(*):是的,我确实从我的屁股上取下了这些数字.50是我目前默认使用的.