小编and*_*era的帖子

如何解决不良的nHibernate集合初始化问题

nHibernate3; 从EAV数据模式中检索4xxx记录.当nHibernate或.NET第一次初始化这些集合时,我们看到了严重的惩罚.后续调用看起来效率更高.在SQL Server Management Studio中运行相同的查询会导致预期的快速返回时间.

使用Fluent和运行时映射代替.hbm.xml; 好奇,如果序列化的映射会有帮助吗?

nHibernate Profiler和log4net日志记录似乎没有让我继续下去.在这个过程中,总共有140,000个实体被水合.

附上我的dotTrace性能跟踪的屏幕截图,显示了集合初始化惩罚: 慢速nHibernate集合初始化的dotTrace

尝试了加入和渴望fetchtypes,没有明显的结果,但我不是100%肯定我实现了这些 - 只是父母需要如此指定,还是子表也需要被标记?

var products = ((HandleSession)_handleSession).Session.CreateCriteria(typeof(Product))
                    .SetFetchMode("Product", FetchMode.Eager)
                    .List<Product>()
                    .AsEnumerable();
Run Code Online (Sandbox Code Playgroud)

通过web.config启用反射优化器(我认为): 启用反射优化器

这是花费大部分时间的地方:

return new ProductList(products.Select(p => p.ToProductContract()));
Run Code Online (Sandbox Code Playgroud)

这只是一个执行此操作的扩展方法:

public static ProductContract ToProductContract(this Product product)
        {
            return new ProductContract
                       {
                           Name = product.ProductName,
                           ProductTypeName = product.ProductType.ProductTypeName,
                           UpdateTimeStamp = product.UpdateDateTime,
                           ProductNumber = product.ProductNumber,
                           Attributes = product.ProductAttributes.ToCommonAttribute().ToList(),
                           GroupCategories = product.ProductGroups.ToGroupCategory().ToList(),
                           PublicUniqueId = product.PublicUniqueId
                       };
        }
Run Code Online (Sandbox Code Playgroud)

映射:

internal class ProductMapping : ClassMap<Product>
    {
        private const string _iscurrentindicator = "IsCurrentIndicator=1";

        public ProductMapping()
        {
            Table("Product"); …
Run Code Online (Sandbox Code Playgroud)

.net nhibernate fluent-nhibernate nhibernate-criteria

2
推荐指数
1
解决办法
4322
查看次数