public void ClearParseInformation(FileName fileName) { ParserServiceEntry entry = GetFileEntry(fileName, false); if (entry != null) { entry.ExpireCache(); } }
internal void RemoveEntry(ParserServiceEntry entry) { Debug.Assert(entry.rwLock.IsWriteLockHeld); lock (fileEntryDict) { ParserServiceEntry entryAtKey; if (fileEntryDict.TryGetValue(entry.fileName, out entryAtKey)) { if (entry == entryAtKey) { fileEntryDict.Remove(entry.fileName); } } } }
internal void RemoveEntry(ParserServiceEntry entry) { Debug.Assert(Monitor.IsEntered(entry)); lock (fileEntryDict) { ParserServiceEntry entryAtKey; if (fileEntryDict.TryGetValue(entry.fileName, out entryAtKey)) { if (entry == entryAtKey) { fileEntryDict.Remove(entry.fileName); } } } }
internal void RegisterForCacheExpiry(ParserServiceEntry entry) { // This method should not be called within any locks Debug.Assert(!(entry.rwLock.IsReadLockHeld || entry.rwLock.IsUpgradeableReadLockHeld || entry.rwLock.IsWriteLockHeld)); ParserServiceEntry expiredItem = null; lock (cacheExpiryQueue) { cacheExpiryQueue.Remove(entry); // remove entry from queue if it's already enqueued if (cacheExpiryQueue.Count >= cachedEntryCount) { // dequeue item at front expiredItem = cacheExpiryQueue[0]; cacheExpiryQueue.RemoveAt(0); } cacheExpiryQueue.Add(entry); // add entry to back } if (expiredItem != null) { expiredItem.ExpireCache(); } }
ParserServiceEntry GetFileEntry(FileName fileName, bool createIfMissing) { if (fileName == null) { throw new ArgumentNullException("fileName"); } ParserServiceEntry entry; lock (fileEntryDict) { if (!fileEntryDict.TryGetValue(fileName, out entry)) { if (!createIfMissing) { return(null); } entry = new ParserServiceEntry(this, fileName); fileEntryDict.Add(fileName, entry); } } return(entry); }
internal void RegisterForCacheExpiry(ParserServiceEntry entry) { // This method should not be called within any locks Debug.Assert(!Monitor.IsEntered(entry)); ParserServiceEntry expiredItem = null; lock (cacheExpiryQueue) { cacheExpiryQueue.Remove(entry); // remove entry from queue if it's already enqueued if (cacheExpiryQueue.Count >= cachedEntryCount) { // dequeue item at front expiredItem = cacheExpiryQueue[0]; cacheExpiryQueue.RemoveAt(0); } cacheExpiryQueue.Add(entry); // add entry to back } if (expiredItem != null) expiredItem.ExpireCache(); }
internal void RemoveEntry(ParserServiceEntry entry) { Debug.Assert(Monitor.IsEntered(entry)); lock (fileEntryDict) { ParserServiceEntry entryAtKey; if (fileEntryDict.TryGetValue(entry.fileName, out entryAtKey)) { if (entry == entryAtKey) fileEntryDict.Remove(entry.fileName); } } }
ParserServiceEntry GetFileEntry(FileName fileName, bool createIfMissing) { if (fileName == null) throw new ArgumentNullException("fileName"); ParserServiceEntry entry; lock (fileEntryDict) { if (!fileEntryDict.TryGetValue(fileName, out entry)) { if (!createIfMissing) return null; entry = new ParserServiceEntry(this, fileName); fileEntryDict.Add(fileName, entry); } } return entry; }
internal void RemoveEntry(ParserServiceEntry entry) { Debug.Assert(entry.rwLock.IsWriteLockHeld); lock (fileEntryDict) { ParserServiceEntry entryAtKey; if (fileEntryDict.TryGetValue(entry.fileName, out entryAtKey)) { if (entry == entryAtKey) fileEntryDict.Remove(entry.fileName); } } }