public override void Close() { try { _Closed = true; Cleanup(); if (!_ReadOnly) { _FileLastAccessManager.Add(_FilePath); } } catch (Exception e) { try { if (CachedFileBufferManager.ErrorMessage != null) { CachedFileBufferManager.ErrorMessage(string.Format("Closing CachedFileStream fail. FilePath:{0}", _FilePath), e); } } catch { } } base.Close(); }
internal Buffer(CachedFileBufferManager mgr, LinkedList <Buffer> bufferList, int size) { _HeadPosition = 0; _LastAccessTime = DateTime.Now; _Node = bufferList.AddLast(this); _Data = new byte[size]; _Mgr = mgr; }
private int InitCacheBufferIndex() { int indexLength = (int)(this.Length / CachedFileBufferManager.BufferUnitSize); if ((this.Length % CachedFileBufferManager.BufferUnitSize) > 0) { indexLength++; } _CacheBufferIndex = new CachedFileBufferManager.Buffer[indexLength]; _LastOLWithBuffer = new OffsetLength[indexLength]; _CachedFileMgr = CachedFileBufferManager.CachedFileBufMgr; _CurPosition = 0; return(indexLength); }
private void CacheProc() { try { while (true) { int[] indexes = null; lock (_CacheLock) { if (_CacheIndexes.Count == 0) { _CacheThread = null; break; } else { indexes = _CacheIndexes.ToArray(); _CacheIndexes.Clear(); } } foreach (int index in indexes) { lock (_CacheLock) { if (_Closing) { break; } } if (!InnerCacheUnit(index)) { break; } } } } catch (Exception e) { try { if (CachedFileBufferManager.ErrorMessage != null) { CachedFileBufferManager.ErrorMessage(string.Format("Cache file fail. FilePath:{0}", _FilePath), e); } } catch { } } finally { lock (_CacheLock) { _CacheThread = null; } } CacheAllFinished = true; }
static public void Init(int memorySize, DelegateErrorMessage errorMessage) { CachedFileBufMgr = new CachedFileBufferManager(memorySize, errorMessage); }