/// <summary> /// Get a page from cache or from disk (get from cache or from disk) /// </summary> public T GetPage <T>(uint pageID) where T : BasePage { lock (_disk) { var page = _cache.GetPage(pageID); // is not on cache? load from disk if (page == null) { var buffer = _disk.ReadPage(pageID); // if datafile are encrypted, decrypt buffer (header are not encrypted) if (_crypto != null && pageID > 0) { buffer = _crypto.Decrypt(buffer); } page = BasePage.ReadPage(buffer); _cache.AddPage(page); } return((T)page); } }
/// <summary> /// Get a page from cache or from disk (and put on cache) /// </summary> public T GetPage <T>(uint pageID) where T : BasePage { // lock concurrency access (read access are not in a lock transaction) lock (_cache) { var page = _cache.GetOrDefault(pageID); // is not on cache? load from disk if (page == null) { var buffer = _disk.ReadPage(pageID); // if datafile are encrypted, decrypt buffer (header are not encrypted) if (_crypto != null && pageID > 0) { buffer = _crypto.Decrypt(buffer); } page = BasePage.ReadPage(buffer); _cache.Add(pageID, page); } return((T)page); } }