Another point is first object creations might be slow, as it is cold start and some caching etc things and perhaps proxy factories are initialized, a hot profile would tell a lot more.
Tuna Toksöz Eternal sunshine of the open source mind. http://devlicio.us/blogs/tuna_toksoz http://tunatoksoz.com http://twitter.com/tehlike On Wed, Aug 12, 2009 at 4:47 PM, Jason Meckley <jasonmeck...@gmail.com>wrote: > > NH does much more than simply make database calls. There is > entity mapping > 1st/2nd level caching > change management > > and that's the main points. there is also other subtle features of NH. > > Also ORM's are not really meant for large record sets. > I believe I saw 300,000+ records being deleted. This sounds like more > of an ETL operation. > > And comparing how NH and EF can issue the query "delete from [table]" > is pointless. Where NH shines is modeling the database to the domain. > There are numerous hooks between interceptorts, listeners, cache > managment, entity hydration, mapping/query options which allow you to > mold NH to your domain (not your domain to NH). > > The learning curve for NH is steep, I won't argue that. But it is very > powerful and flexible. For more examples of what is possible with NH > check out blogs.hibernatingrhinos.com, > http://ayende.com/Blog/category/510.aspx > and http://nhforge.org/ > > > On Aug 12, 9:17 am, "F.B. ten Kate" <folk...@bluenode.nl> wrote: > > Ow i in no way intend to call my NHibernate from buttons in an > > actually production application. I want to have a repository handle on > > those nasty things for me. > > > > As for me never loading this many enitities... I do actually have to > > load these. With the comments regarding the proxy creation or caching, > > if i understand correctly proxy's are created for Lazy loading and > > things. > > > > In my first tests (maps not posted here but basically i didnt have an > > Entiteit object) the query was also as slow. Or does NHibernate create > > proxy's for entity's it will load in the end eitherway? > > > > Basically the way i "see" it. NHibernate should query for me and put > > all the data inside Debiteur objects which are returns as a IList. > > > > Afaik the Entity framework does the exact same yet for some reason > > which i cannot seem to wrap my head around NHibernate takes 19 seconds > > to do this... this is the time i'm trying to explain and hopefully > > reduce since atm it doesn't make sense to me. > > > > On 12 aug, 15:01, Fabio Maulo <fabioma...@gmail.com> wrote: > > > > > proxy creation and cached proxi. > > > > > 2009/8/12 F.B. ten Kate <folk...@bluenode.nl> > > > > > > Okay, fiddled around some more, Now i create a new Session when i hit > > > > the button. which i close and then dispose when done. > > > > > > Next time i hit the button it creates a new Session again, now i can > > > > reproduce the slowness. Every singletime i hit the button it takes > 19+ > > > > seconds to execute everything. What would typically be the reason for > > > > this? Because to me it would make no sense for the Session to be slow > > > > the first time it executes this query, but then if the same Session > > > > executes the SAME query things are executed as fast as they should. > > > > > > On 12 aug, 14:47, "F.B. ten Kate" <folk...@bluenode.nl> wrote: > > > > > I've posted my mappings and configuration already. Same goes for > teh > > > > > code, only thing i didn't post is the Classes which i map too. Ill > > > > > post those now > > > > > > > using System; > > > > > using System.Collections.Generic; > > > > > using System.Linq; > > > > > using System.Text; > > > > > > > namespace NHibernate2 > > > > > { > > > > > public class tEntiteit > > > > > { > > > > > private Int32 id; > > > > > private string name; > > > > > private IList<Debiteur> debiteurs; > > > > > > > public virtual IList<Debiteur> Debiteurs > > > > > { > > > > > set > > > > > { > > > > > debiteurs = value; > > > > > } > > > > > get > > > > > { > > > > > return debiteurs; > > > > > } > > > > > } > > > > > > > public virtual Int32 Id > > > > > { > > > > > set > > > > > { > > > > > id = value; > > > > > } > > > > > get > > > > > { > > > > > return id; > > > > > } > > > > > } > > > > > public virtual string Name > > > > > { > > > > > set > > > > > { > > > > > name = value; > > > > > } > > > > > get > > > > > { > > > > > return name; > > > > > } > > > > > } > > > > > } > > > > > > > } > > > > > > > using System; > > > > > using System.Collections.Generic; > > > > > using System.Text; > > > > > > > namespace NHibernate2 > > > > > { > > > > > public class Debiteur > > > > > { > > > > > private Int32 id; > > > > > private string name; > > > > > private string sorteernaam; > > > > > private DateTime datumwijzigen; > > > > > private int actiefneeja; > > > > > private tEntiteit entiteit; > > > > > > > public virtual Int32 Id > > > > > { > > > > > set > > > > > { > > > > > id = value; > > > > > } > > > > > get > > > > > { > > > > > return id; > > > > > } > > > > > } > > > > > public virtual tEntiteit Entiteit > > > > > { > > > > > set > > > > > { > > > > > entiteit = value; > > > > > } > > > > > get > > > > > { > > > > > return entiteit; > > > > > } > > > > > } > > > > > public virtual Int32 ActiefNeeJa > > > > > { > > > > > set > > > > > { > > > > > actiefneeja = value; > > > > > } > > > > > get > > > > > { > > > > > return actiefneeja; > > > > > } > > > > > } > > > > > public virtual string Name > > > > > { > > > > > set > > > > > { > > > > > name = value; > > > > > } > > > > > get > > > > > { > > > > > return name; > > > > > } > > > > > } > > > > > public virtual string Sorteernaam > > > > > { > > > > > set > > > > > { > > > > > sorteernaam = value; > > > > > } > > > > > get > > > > > { > > > > > return sorteernaam; > > > > > } > > > > > } > > > > > public virtual DateTime DatumWijziging > > > > > { > > > > > set > > > > > { > > > > > datumwijzigen = value; > > > > > } > > > > > get > > > > > { > > > > > return datumwijzigen; > > > > > } > > > > > } > > > > > } > > > > > > > } > > > > > > > On 12 aug, 14:43, Carlos cubas <veno...@hotmail.com> wrote: > > > > > > > > Maybe if you show us your configuration file and mapping files we > can > > > > help more. > > > > > > > > -Carlos > > > > > > > > Practice makes perfect, but if no one is perfect, why practice? > > > > > > > > > Date: Wed, 12 Aug 2009 05:26:29 -0700 > > > > > > > Subject: [nhusers] Re: NHIbernate performance vs Entity > Framework > > > > > > > From: folk...@bluenode.nl > > > > > > > To: nhusers@googlegroups.com > > > > > > > > > Changed the code a little, i'm now creating one session, and > one > > > > > > > factory on the Load. However i use a button_click to trigger > the > > > > > > > actual querying.. > > > > > > > > > First time i click el button it's slow (both the msgbox timer > shows > > > > 21 > > > > > > > seconds and profiler tells me 19 seconds) but the second time i > hit > > > > > > > the button (even after clearing th SQL Cache) it runs in less > then 5 > > > > > > > seconds. > > > > > > > > > So it clearly has something to do with the creating of objects > or > > > > > > > something. I'm kind of clueless as to what i'm doing wrong to > cause > > > > > > > the horrible performance i'm having on the first calling > > > > > > > > > On 12 aug, 14:15, "F.B. ten Kate" <folk...@bluenode.nl> wrote: > > > > > > > > Ow, little extra info, it's 390000 Records i'm querying, > which > > > > > > > > obviously is kinda alot. > > > > > > > > > > On 12 aug, 14:12, "F.B. ten Kate" <folk...@bluenode.nl> > wrote: > > > > > > > > > > > Like i said, the "timer" is in SQL Profiler. In otherwords > not in > > > > the > > > > > > > > > code, but i also have the following bits in there to > compare. > > > > > > > > > > > DateTime start = DateTime.Now; > > > > > > > > > IList<Debiteur> lijst = > session.CreateCriteria(typeof > > > > > > > > > (Debiteur)).List<Debiteur>(); > > > > > > > > > DateTime stop = DateTime.Now; > > > > > > > > > dataGridView1.DataSource = lijst; > > > > > > > > > > > MessageBox.Show((stop-start).Seconds +"."+ > (stop- > > > > > > > > > start).Milliseconds); > > > > > > > > > > > Meaning i start the timer AFTER the session has been > created, and > > > > > > > > > start the "query" if i am getting this. the NHibernate > project > > > > atm > > > > > > > > > takes 26 seconds to do this (this is with another enitity > added > > > > with > > > > > > > > > Lazyloading, without this entitity it was +- 21 seconds) EF > does > > > > the > > > > > > > > > same action in +- 5 seconds. Which leads me to believe the > > > > problem > > > > > > > > > lies in the execution of the SQL. > > > > > > > > > > > On 12 aug, 14:07, Paco Wensveen <pac...@gmail.com> wrote: > > > > > > > > > > > > The sql is not executing slowly, the building of the > > > > sessionfactory is > > > > > > > > > > slow. Start your timer after buildsessionfactory and > compare > > > > again. > > > > > > > > > > > > On Wed, Aug 12, 2009 at 2:01 PM, F.B. ten Kate< > > > > folk...@bluenode.nl> wrote: > > > > > > > > > > > > > Yes i am atm, since it's just a quit check to run a > query, > > > > but would > > > > > > > > > > > this explain the SQL executing this slowly? > > > > > > > > > > > > > I know i'm not using any "best" practises and things, > this is > > > > the > > > > > > > > > > > first thing im doing with both NHibernate and EF. > > > > > > > > > > > > > Here is the code running it. > > > > > > > > > > > > > Configuration cfg = new Configuration(); > > > > > > > > > > > cfg.Configure(); > > > > > > > > > > > cfg.AddAssembly(typeof(Debiteur).Assembly); > > > > > > > > > > > > > ISessionFactory factory = > > > > cfg.BuildSessionFactory(); > > > > > > > > > > > ISession session = factory.OpenSession(); > > > > > > > > > > > > > IList<Debiteur> lijst = > > > > session.CreateCriteria(typeof > > > > > > > > > > > (Debiteur)).List<Debiteur>(); > > > > > > > > > > > > > dataGridView1.DataSource = lijst; > > > > > > > > > > > > > On 12 aug, 13:22, Kim Johansson < > hagbarddenst...@gmail.com> > > > > wrote: > > > > > > > > > > >> Are you > > > > ... > > > > read more » > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "nhusers" group. To post to this group, send email to nhusers@googlegroups.com To unsubscribe from this group, send email to nhusers+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/nhusers?hl=en -~----------~----~----~----~------~----~------~--~---