Five New Optimizely Certifications are Here! Validate your expertise and advance your career with our latest certification exams. Click here to find out more

Navigation [hide] [expand]
Area: Optimizely CMS
ARCHIVED This content is retired and no longer maintained. See the latest version here.

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:

C#
public interface IReadOnly
    {
        void MakeReadOnly();
        bool IsReadOnly
        {
            get;
        }
    }

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

The lifecycle of a typical PageData object is as follows:

  1. Create the PageData object as mutable (which means writeable).
  2. Populate the PageData object with properties.
  3. Call the Core.PageData.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.

Last updated: Sep 21, 2015