I've just written a reeeally simple console app to try and find where this unmanaged memory is coming from...8.7MB to 22MB is quite a jump - what's using it? Is that really runtime?
Results: *Start of the App* Task Manager: 5,976 K Gen 1 Objects: 39.77 KB Gen 2 Objects: 0 Large Object Heap: 35.58 KB Unused allocated memory: 28.25 KB Unmanaged 8.766 MB *After factory is created* Task Manager: 29,852 K Gen 1 Objects: 512.2 KB Gen 2 Objects: 799.3 KB Large Object Heap: 47.61 KB Unused allocated memory: 8.91 MB Unmanaged 21.95 MB *Paul Allington [image: See my profile]<http://www.intelligentpenguin.co.uk/about/theteam/paul> * *T:* 01799 522 665 *M:* 07973 145 754 *E:* [email protected] *W:* www.intelligentpenguin.co.uk *W:* www.creative-penguin.co.uk [image: Intelligent Penguin] <http://www.intelligentpenguin.co.uk> For highly creative & technically brilliant websites, and on-line management systems ------------------------------------------------------------------------------ My profiles: [image: Facebook] <http://www.facebook.com/paulallington>[image: LinkedIn] <http://uk.linkedin.com/in/paulallington>[image: Twitter]<http://twitter.com/paulallington> Contact me: [image: Google Talk/]phallington [image: Skype/]paul-allington [image: Y! messenger/]paul_allington On Thu, Feb 10, 2011 at 9:21 AM, Paul Allington < [email protected]> wrote: > Thanks for that - very helpful. > > The snapshot is being taken after the request has completed. Am I the only > one who has a large chunk of unmanaged memory allocated when I use > nhibernate? > > * > * > *Paul Allington [image: See my > profile]<http://www.intelligentpenguin.co.uk/about/theteam/paul> > * > *T:* 01799 522 665 > *M:* 07973 145 754 > *E:* [email protected] > *W:* www.intelligentpenguin.co.uk > *W:* www.creative-penguin.co.uk > [image: Intelligent Penguin] <http://www.intelligentpenguin.co.uk> For > highly creative & technically brilliant websites, and on-line management > systems > > ------------------------------------------------------------------------------ > My > profiles: [image: Facebook] <http://www.facebook.com/paulallington>[image: > LinkedIn] <http://uk.linkedin.com/in/paulallington>[image: > Twitter]<http://twitter.com/paulallington> > Contact me: [image: Google Talk/]phallington [image: Skype/]paul-allington > [image: Y! messenger/]paul_allington > > > > > On Wed, Feb 9, 2011 at 10:20 PM, John Davidson <[email protected]>wrote: > >> The code from Jason will work, but it assumes that the entire session >> happens in one transaction, which probably works in 99% of use cases, while >> the other 1% needs a different management strategy. This can be done by >> ensuring that a commit happens at the end of your first logical work unit >> and that it starts a new transaction for the second work unit. >> >> The other piece to check is that the http module is actually being used. >> It is bound into the aspx pipeline by the web.config file. The Register >> RequestHTTPModule section is important. >> >> Finally there is the question of when and how the memory snapshot is being >> generated. The snapshot needs to be taken when there is no active requests, >> i.e. when a web page has just completed loading, rather than while it is >> loading. >> >> >> On Wed, Feb 9, 2011 at 4:33 PM, Paul Allington < >> [email protected]> wrote: >> >>> Thanks - that's useful, I'll clean up the request code. Perhaps it's >>> just the way it managed the objects, but it doesn't explain the 30MB of >>> unmanaged memory - this I can't profile. Any clue what this could be? >>> >>> * >>> * >>> *Paul Allington [image: See my >>> profile]<http://www.intelligentpenguin.co.uk/about/theteam/paul> >>> * >>> *T:* 01799 522 665 >>> *M:* 07973 145 754 >>> *E:* [email protected] >>> *W:* www.intelligentpenguin.co.uk >>> *W:* www.creative-penguin.co.uk >>> [image: Intelligent Penguin] <http://www.intelligentpenguin.co.uk> For >>> highly creative & technically brilliant websites, and on-line management >>> systems >>> >>> ------------------------------------------------------------------------------ >>> My >>> profiles: [image: Facebook] <http://www.facebook.com/paulallington>[image: >>> LinkedIn] <http://uk.linkedin.com/in/paulallington>[image: >>> Twitter]<http://twitter.com/paulallington> >>> Contact me: [image: Google Talk/]phallington [image: Skype/]paul-allington >>> [image: Y! messenger/]paul_allington >>> >>> >>> >>> >>> On Wed, Feb 9, 2011 at 9:05 PM, Jason Meckley <[email protected]>wrote: >>> >>>> I think the problem is your transaction management in end request. >>>> rollback if error (good) else flush session (bad). call >>>> transaction.commit() >>>> instead and dispose of the transaction. >>>> >>>> some things to consider: >>>> 1. sessions are cheap so just create one for each request and dispose >>>> when the request ends. >>>> 2. all NH actions should be wrapped in a transaction if every request >>>> will require db access begin/end the transaction with the session. if not >>>> all WCF calls require NH, than manage the transaction with a decorator >>>> around the WCF call (similar to Filters in MVC frameworks) >>>> >>>> I would start by cleaning up the module code >>>> >>>> //begin request >>>> var session = SessionFactory.OpenSession(); >>>> session.BeginTransaction(); >>>> ManagedWebSessionContext.Bind(HttpContext.Current, session); >>>> >>>> //end request >>>> var session = ManagedWebSessionContext.Unbind(HttpContext.Current, >>>> SessionFactory); >>>> using(session) >>>> { >>>> using(var tx = session.Transaction) >>>> { >>>> if(Server.LastException == null) >>>> { >>>> tx.Commit(); >>>> } >>>> else >>>> { >>>> tx.Rollback(); >>>> } >>>> } >>>> } >>>> >>>> that's it. now if you want to manage the transaction per WCF action then >>>> the module would only manage the session >>>> //begin request >>>> >>>> ManagedWebSessionContext.Bind(HttpContext.Current, >>>> SessionFactory.OpenSession()); >>>> >>>> //end request >>>> ManagedWebSessionContext.Unbind(HttpContext.Current, >>>> SessionFactory).Dispose(); >>>> >>>> and a WCF decorator would manage the transaction. something like >>>> //decorator... wcfservice is the original/base implementation >>>> using(var txt = SessionFactory.GetCurrentSession().BeginTransaction()) >>>> { >>>> try >>>> { >>>> wcfservice.Proceed(); >>>> tx.Commit(); >>>> } >>>> catch >>>> { >>>> tx.Rollback(); >>>> throw; >>>> } >>>> } >>>> >>>> -- >>>> 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. >>> >> >> -- >> 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.
