Пример #1
0
			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);
				}
			}
Пример #2
0
			public RendererProxy(RendererBase realRenderer)
			{
				_wrapper = new ReferenceCountedObjectWrapper<RendererBase>(realRenderer);
			}
Пример #3
0
			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);
				}
			}
Пример #4
0
		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);
			}
		}
Пример #5
0
			internal CacheItemProxy(ReferenceCountedObjectWrapper<CacheItem> wrapper)
			{
				_wrapper = wrapper;
				_cacheItem = _wrapper.Item;
				_wrapper.IncrementReferenceCount();
			}