Released Catel 5.12 beta

We are happy to announce that we have put Catel 5.12.0 into beta. This means the team thinks it’s (nearly) code complete, and only bug fixes will be applied to the beta channel.

We aim to release the new version in about 2 weeks time, so make sure to test before this date.

Our recommendation is to try out the new beta as soon as possible, this is your time to provide feedback! We already had some great feedback, thanks for the users reporting.

You can download the beta via NuGet, just make sure to enable “Include prerelease” when checking for updates.

Serialization engine improvements

We’ve blogged about this earlier, but wow we are proud of this one. It was on our wish list for quite some time, and a few months back we finally found the courage to take on the serialization engine performance and memory management. The results are amazing as you can see below.

Performance improvements

Memory usage improvements

Less boxing, same property bags

One of the downsides of using property bags is that they are usually stored inside a Dictionary<string, object>. This means every value type will be boxed into a reference type. In this new version, the BoxingCache is actively being used by the (View)ModelBase and the PropertyBag, re-using earlier boxed value types, causing less objects to be in memory.

We are still working out details, but we have some promising proof of concepts of typed property bags that could be even faster and more efficient with memory management. This feature didn’t make it into the beta and we will postpone this to a next release. To follow the progress, check out these tickets:

Reflection adapters

As part of the performance improvements, we’ve introduced a new object adapter interface IObjectAdapter. By default, Catel provides the following implementations:

  • ReflectionObjectAdapter (behaves the same way as previous version of Catel behaved)
  • ExpressionTreeObjectAdapter

The ExpressionTreeObjectAdapter has a 1-time cost of compiling expressions, but is super faster after the first “compilation” hit. It’s registered by default and uses the FastMemberInvoker<T> class under the hood, which is a lazy-compiling expression tree accessor.

If you need to access stuff via reflection, these are definitely new features to try.

Automatically generated release notes

We didn’t stop improving Catel itself. We had another thing on our wish list for quite some time, which is automatically generated release notes. We’ve been getting better at managing our issues in GitHub. This will be the first release with automatically generated release notes, created with GitReleaseManager:

image