Area: Optimizely CMS
Applies to versions: 12 and higher
Other versions:

Read-only object cache

Recommended reading 
Note: This documentation is for the preview version of the upcoming release of CMS 12/Commerce 14/Search & Navigation 14. Features included here might not be complete, and might be changed before becoming available in the public release. This documentation is provided for evaluation purposes only.

This topic describes how to work with read-only object caching, and how this type of caching works behind the scene.

How it works

Most APIs in Optimizely CMS return read-only instances of objects, such as IContentLoader.Get<TContentData> which return a read-only IContent instance.

To make changes to read-only instances, create a writable clone with the CreateWritableClone method, which has the following advantages:

  • Reduce memory consumption. Threads serving Web requests get the same instance of an object, which effectively reduces the amount of short-lived objects that are created.
  • Improve performance. Returning shared read-only instances offers better performance.
  • Cleaner architecture. This simplifies the implementation because you cannot make changes to an instance of an object shared with other threads.

Classes that have the read-only support implements the IReadOnly<T> interface, which is defined as follows:

public interface IReadOnly
    void MakeReadOnly();
    bool IsReadOnly

public interface IReadOnly<T> : IReadOnly
    T CreateWritableClone();

The lifecycle of a typical IContent instance is as follows:

  1. Create the IContent instance as mutable (which means writeable).
  2. Populate the IContent instance with property values.
  3. Call the IReadOnly.MakeReadOnly method to ensure that any contained objects are made read-only. The object is immutable for the remainder of its lifetime.
  4. Add the object to the cache.
Do you find this information helpful? Please log in to provide feedback.

Last updated: Jul 02, 2021

Recommended reading