Do you know how can I raise an issue on https://nhibernate.jira.com?
Can't find anywhere to post/raise anything on it after login.

On Tuesday, January 22, 2013 11:05:19 AM UTC, Ricardo Peres wrote:
>
> 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/-/mGZStPgm7MMJ.
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