When we took a look at what performance improvements that we could make to the EPiServer CMS platform there was one thing that stood out like a sore thumb, namely the PropertyDataCollection.

The main problem was how it’s base class, NameObjectCollectionBase, was handling retrieval of items in the collection in a multi-threaded scenario. As it happens to be, this scenario is one of the most commonly used on an EPiServer CMS site, since this is performed every time a content property is accessed. When profiling sites this often ended up as one of the code paths where most of the time was spent, in the case of some of the pages on the Alloy example site it turned out to be almost 20% of the total time spent rendering the page.

Read the rest of this entry »

On the project I’m working on at the moment there are plans to do a lot of page retrieving based on categories. My initial thought was to retrieve all pages for that section and to the filtering in memory. Possibly with some pre-filtered and cached collections to speed it up, but since the categories in this case can be combined quite freely, the hit rate on this cache would probably be quite low. Reading Steve’s article about FindPagesWithCriteria and Performance I decided to do some quick unscientific tests on the differences between using FindPagesWithCriteria and a recursive GetChildren implemented as shown below using LINQ filtering to select categories. Read the rest of this entry »