Hello, Steven!

Sounds interesting! Why don't you open an improvement issue 
on https://nhibernate.jira.com?

Regards,

RP


On Tuesday, January 22, 2013 10:08:24 AM UTC, Steven Xi wrote:
>
> I was started choosing orm systems since few weeks ago and little bit 
> struggle in use NH or EF. 
> I know there was a big argument around which one's better, which i'm not 
> quite interested to discuss here, but I did test some basic performance of 
> both.
> I have to say I really like the flexibility NH provided, but I still bit 
> concern about the performance, especially materialization of NH is much 
> slower than EF.
> Although I temporary chose EF as the Orm of my currently project, but I 
> hope that can switch back to NH once the performance has been improved.
>
> But, anyway, after reviewing and profile NH code for few hours, I tried to 
> make some small change to improve the performance,
> here's what I found.
>
> When NH materialize Linq query, it uses dynamicinvoke to construct object, 
> which is obviously slow. After change the constructor call delegate (both 
> in Linq\ResultTransformer and Linq\ExpressionToHqlTranslationResults) from 
> Delegate type to Func<object[],object> type ( for item transformer only as 
> testing, but list transformer should be same),  the time costed *reduced 
> to less than 50%.*
> *
> *
> Here's some test result, retrieve 200001 rows, simple entity.
> Entity (single table in db): 
>
>     public class Person
>     {
>         [Key]
>         public virtual int PersonId { get; protected set; }
>  
>         [StringLength(100)]
>         public virtual string FirstName { get; set; }
>  
>         [StringLength(100)]
>         public virtual string LastName { get; set; }
>     }
>
>
>
>  Query(Session is status less):
>
>             int agr = 0;
>             foreach (var pp in session.Query<Person>().Where(p => p.PersonId 
> > 0)
>                 .Select(p => new { p.PersonId, p.FirstName, p.LastName }))
>             //.Take(100))
>             {
>                 agr++;
>             }
>             return agr;
>
>
> Before changing this query took 1.2 seconds (while EF took 0.2 second) on 
> my machine ( SQL express, i5 3.1Ghz 4GB win7).
> After changing this query took 0.5 to 0.6 seconds.
>
> This is the quick change I can discover so far.
> Some other place I've looked is NH 's retrieve row/column data and 
> converting types designed little bit too heavy, but changing this requires 
> changing the code structur, which I dont have to do yet. Something I can 
> think about to be small change is it uses lots of Converto.Toxxx() method 
> which I believe to be a performance impact, and also, after it do a 
> conversion (in most case is unnecessary) it do a boxing again, so there's 
> some extra steps can be removed.
>
> Hope it helps.
>
> Regards,
> Steven
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"nhusers" group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/nhusers/-/OX5sf3YeWe4J.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/nhusers?hl=en.

Reply via email to