How To Configure Caching
Document Toolkit 2.0.8 (June 2011 Update
) includes a number of enhancements related to caching of document parts. This tutorial explains and provides details on how to take
advantage of the new caching features.
Document Toolkit provides two types of caches; part caches and object caches. The part cache stores the raw byte data of document parts in its backing store. The object cache stores instantiated object such as fonts, image bitmaps, processed page XAML string,
In order to prevent unnecessary requests for document parts that have been requested before, the part cache stores requested parts in its backing store. A part cache is implemented as an IPackageReader and wraps an existing package reader. The part cache reader
verifies whether a part exists in its cache and returns it instead of passing the request on to the wrapped package reader.
Currently there are two cache readers available; the
. The MemoryCacheReader
caches parts in memory for the lifetime of a document, the
save documents parts to the isolated storage. Both readers derive from
, you can easily create your own cache reader by deriving from this class as well.
The following snippet demonstrates how to use the MemoryCacheReader
to wrap a
var reader = new DefaultPackageReader(documentStream);
var cacheReader = new MemoryCacheReader(reader);
this.DataSource.PackageReader = cacheReader;
is a reference to a DocumentDataSource
instance defined in XAML.
The use of a part cache reader makes most sense when the fetching of document parts takes a relatively long time. This is often the case when a part request is issued over a network such as with the
. When a package reader loads its parts from a locally available document, using a part cache will do little to improve performance.
Next to the part cache, Document Toolkit caches fonts, image bitmaps, page XAML and resource dictionary XAML elements in memory. The elements in the object cache has a lifetime that is equal to the lifetime of its owning document. When a document is disposed
(by assinging a null value or another package reader to the DocumentDataSource
), the object cache is disposed as well. The object cache prevents unnecessary part request and ensures objects are instantiated once and re-used throughout the lifetime of
The object cache is built-in and can be configured by modifying the cache properties of the
class. The following XAML snippet demonstrates how to configure the object cache so that a maximum of 16 images, 16 pages and 16 resource dictionaries are cached in memory.
<doc:DocumentDataSource x:Name="DataSource" LoadError="DataSource_LoadError" >
Note: there's no option to configure the max size of the font cache, fonts are always cached.