Again, I've been reckless enough to lend out blog-space to a bright developer. This time it's Thomas Fritzen from the partner, Creuna. Here is his post:
The following has been experience on EPiServer 5.1.422.269
While developing a medium sized website (40K pages) for a customer, using local EPiServer installations for each developer, and a central database, we experienced quite a lot of latency in our development environment after each recompile – and often the error “Application is busy under initialization phase” would occur – when trying to click on more than one link or when reloading a page to quickly on the website.
This can be quite a pain – especially in edit mode - and as the number of pages on the website grew, the site took longer and longer to initialize. (3-4 seconds).
To find out why this delay occurred, we enabled the debug mode logging in EPiServer.
This revealed that the culprit was loading the DataFactoryCache with 38000+ elements
2008-12-12 11:53:11,446 INFO - Passed ValidateEnterpriseLicense
2008-12-12 11:53:11,446 INFO - Passed InitializeXFormEmail
2008-12-12 11:53:11,446 DEBUG - key=DataFactoryCache.MasterKey, retval=null
2008-12-12 11:53:11,446 DEBUG - key=DataFactoryCache.MasterKey, value=object of type System.Int64, absoluteExpiration=31-12-9999 23:59:59, slidingExpiration=00:00:00, priority=NotRemovable
2008-12-12 11:53:11,446 DEBUG - key=DataFactoryCache.Version, retval=null
2008-12-12 11:53:11,446 DEBUG - key=DataFactoryCache.Version, value=object of type System.Int64, absoluteExpiration=31-12-9999 23:59:59, slidingExpiration=00:00:00, priority=NotRemovable
2008-12-12 11:53:11,446 DEBUG - key=DataFactoryCache.MasterKey, retval=object of type System.Int64
2008-12-12 11:53:11,446 DEBUG - key=DataFactoryCache.Version, retval=object of type System.Int64
2008-12-12 11:53:11,602 DEBUG - key=EPChildrenData:5834, value=object of type EPiServer.Core.PageReferenceCollection, absoluteExpiration=31-12-9999 23:59:59, slidingExpiration=12:00:00, priority=Default
……
2008-12-12 11:53:14,065 DEBUG - key=EPChildrenData:51936, value=object of type EPiServer.Core.PageReferenceCollection, absoluteExpiration=31-12-9999 23:59:59, slidingExpiration=12:00:00, priority=Default
2008-12-12 11:53:14,065 INFO - Passed DataFactoryCache.Initialize
2008-12-12 11:53:14,065 INFO - Passed LazyIndexer
These log lines indicate that the cache setting where wrong for our development environment.
To resolve the issue – some reflector and test work – revealed that setting
pageCacheSlidingExpiration="0"
in the siteSettings of web.config removed this caching.
Now load time is about one second including recompile of the C# code.
It seem the default value of "12:00:00" is only good for a production site – or if you are developing a fairly small website. Setting this value to 0 also has the side effect of not caching data locally – so you see the changes that other people in your development team has made to the pages that they work on, without reloading your site locally.
Regards, Thomas Fritzen Creuna.dk