private void Release(TxCachedData cachedData) { if (cachedData.Release() == 0) { _byId.Remove(cachedData.RecordId); _byPtr.Remove(cachedData.Pointer); cachedData.Dispose(); } }
public IntPtr Acquire(DbRecordId txRecordId) { if (!Indices.TryGetResourcePath(txRecordId, out var resourcePath)) { throw new FileNotFoundException($"Cannot load unknown text resource: {txRecordId}"); } lock (_lock) { if (_byId.TryGetValue(txRecordId, out var cachedData)) { cachedData.Acquire(); return(cachedData.Pointer); } } Byte[] fileContent = NativeFormatProvider.ReadAllBytes(resourcePath); IntPtr result; lock (_lock) { if (_byId.TryGetValue(txRecordId, out var cachedData)) { cachedData.Acquire(); return(cachedData.Pointer); } cachedData = new TxCachedData(txRecordId, resourcePath, fileContent); result = cachedData.Pointer; _byId.Add(txRecordId, cachedData); _byPtr.Add(result, cachedData); } Log.Message($"Loaded resource [0x{txRecordId}, {resourcePath}]."); return(result); }