2010/10/27 Luca7993 <[email protected]>: > Thank you for the answer. > I have understood that the dirty check is what cause the problem. > The use of a stateless session is the only way to remove dirty > checking of all objects in a session? > But with stateless session, there is no more lazy load... > the flushmode.never is another way, but if, at the end, I have to save > only one object that I previously load, when I call the flush, > nhibernate will make the dirty check on all its objects
The noticeably bad performance may be from the large number of dirty checks for a large number of objects. It might be that one or a few dirty checks of all objects isn't an actual problem. You can also evict the readonly objects from the ISession. /Oskar > is there a way to only disable the dirty checking from the elements > retrieved from a query without losing lazy load? Or removing the use > of dirty checking in the session factory, so that for an update, I > have to explicit calls SaveorUpdate? > > > thank you > Luca > > > On 26 Ott, 20:50, Oskar Berggren <[email protected]> wrote: >> Let me guess: You are loading _MANY_ objects? If you then have >> FlushMode.Auto NHibernate will dirty check all objects already loaded >> in the ISession for every subsequent query. As you notice towards the >> end, this isn't affected much by transaction or not. >> >> You can try with FlushMode.Commit (and one single transaction instead >> of one for each call) or even FlushMode.Never since this is readonly. >> Or you can try with IStatelessSession. >> >> For reports, one could also think about whether to use queries with >> projections of the actual data needed, instead of loading the >> entities. Can be faster, but it makes logic in the entity classes >> unavailable when building the report. >> >> /Oskar >> >> 2010/10/26 Luca7993 <[email protected]>: >> >> >> >> > Hi >> > I read almost everywhere that I always should begin and commit >> > nhibernate transaction even if we make a reading query. >> > but I have a strange problem using explicit transactions and I think >> > there is something that I haven't understood with Nhibernate and >> > transactions: >> >> > I have sql server on my machine. >> > In my windows application, I have to create a report and I follow this >> > steps (I'm using NHibernate 3.0 beta): >> >> > -create and open a session >> > -get a list of items A with a GetAll >> > -I have a loop for each A item, and take a list of B items filtered by >> > A (from database) >> > -after that i create a file excel. >> > -close the session >> >> > I'm using always the same session for everything. >> > the getall is wrapped in a nhibernate transaction (using tx = >> > session.begintransaction() ..... tx.Commit()) >> > as I read, I should wrap in a transaction also each query that take >> > list of B items. >> > But if I wrap in transactions, the performance slow down at each >> > passage in the loop...the query takes about 10ms..after 20-30 times, >> > it takes about 100ms...after 100 times about 200ms and go on...(the >> > effective cost of query is still about 10ms) >> > If I don't wrap the queries in transactions (but always using the same >> > session),everything is ok and each query alwyas takes about 10ms... >> >> > If I use instead, different session for each calls to retrieve B >> > items, even if I use transaction, there is no problem. >> >> > I tried to disable the second cache, but it's always the same >> >> > which is my mystake? >> >> > thank you >> >> > -- >> > You received this message because you are subscribed to the Google Groups >> > "nhusers" group. >> > 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 >> > athttp://groups.google.com/group/nhusers?hl=en.- Nascondi testo citato >> >> - Mostra testo citato - > > -- > You received this message because you are subscribed to the Google Groups > "nhusers" group. > 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. > > -- You received this message because you are subscribed to the Google Groups "nhusers" group. 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.
