//-----------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation.
//
//-----------------------------------------------------------------------
namespace Microsoft.Isam.Esent.Interop
{
using System.Diagnostics;
///
/// Static class containing MemoryCaches for different ESENT buffers.
/// Use these to avoid memory allocations when the memory will be
/// used for a brief time.
///
internal static class Caches
{
///
/// The maximum key size that any version of ESENT can have for
/// any page size. This is also the maximum bookmark size.
///
private const int KeyMostMost = 2000;
///
/// The maximum number of buffers we want in a cache.
///
private const int MaxBuffers = 16;
///
/// Cached buffers for columns.
///
private static readonly MemoryCache TheColumnCache = new MemoryCache(128 * 1024, MaxBuffers);
///
/// Cached buffers for keys and bookmarks.
///
private static readonly MemoryCache TheBookmarkCache = new MemoryCache(KeyMostMost, MaxBuffers);
///
/// Cached buffers for keys and bookmarks.
///
private static readonly MemoryCache TheSecondaryBookmarkCache = new MemoryCache(KeyMostMost, MaxBuffers);
///
/// Gets the cached buffers for columns.
///
public static MemoryCache ColumnCache
{
[DebuggerStepThrough]
get { return TheColumnCache; }
}
///
/// Gets the cached buffers for keys and bookmarks.
///
public static MemoryCache BookmarkCache
{
[DebuggerStepThrough]
get { return TheBookmarkCache; }
}
///
/// Gets the cached buffers for keys and secondary bookmarks.
///
public static MemoryCache SecondaryBookmarkCache
{
[DebuggerStepThrough]
get
{
return TheSecondaryBookmarkCache;
}
}
}
}