public void Dispose() { try { if (_wrapper == null) return; _wrapper.DecrementReferenceCount(); if (_wrapper.IsReferenceCountAboveZero()) return; _proxy = null; _wrapper.Item.Dispose(); _wrapper = null; GC.SuppressFinalize(this); } catch(Exception e) { Platform.Log(LogLevel.Error, e); } }
public RendererProxy(RendererBase realRenderer) { _wrapper = new ReferenceCountedObjectWrapper<RendererBase>(realRenderer); }
public void Dispose() { try { if (_wrapper == null) return; _wrapper.DecrementReferenceCount(); OnProxyDisposed(this); _wrapper = null; _cacheItem = null; GC.SuppressFinalize(this); } catch (Exception e) { Platform.Log(LogLevel.Debug, e); } }
private static CacheItemProxy CreateItemProxy(IEnumerable<IComposableLut> luts) { string key = GetKey(luts); lock (_syncLock) { CleanupDeadItems(); ReferenceCountedObjectWrapper<CacheItem> wrapper; if (!_cache.ContainsKey(key)) { wrapper = new ReferenceCountedObjectWrapper<CacheItem>(new CacheItem(key)); _cache[key] = new WeakReference(wrapper); } else { WeakReference reference = _cache[key]; try { wrapper = reference.Target as ReferenceCountedObjectWrapper<CacheItem>; } catch (InvalidOperationException) { wrapper = null; } if (wrapper == null) { wrapper = new ReferenceCountedObjectWrapper<CacheItem>(new CacheItem(key)); _cache[key] = new WeakReference(wrapper); } } return new CacheItemProxy(wrapper); } }
internal CacheItemProxy(ReferenceCountedObjectWrapper<CacheItem> wrapper) { _wrapper = wrapper; _cacheItem = _wrapper.Item; _wrapper.IncrementReferenceCount(); }