📄 enterprisecountercollection.cs
字号:
using System;
using System.Reflection;
using System.Threading;
using System.Collections;
using System.Diagnostics;
namespace EnterpriseObjects
{
/// <summary>
/// Summary description for CounterCollection.
/// </summary>
public class EnterpriseCounterCollection : CollectionBase
{
// members...
private ReaderWriterLock _lock = new ReaderWriterLock();
private Hashtable _cache;
public EnterpriseCounterCollection()
{
}
public void Add(EnterpriseCounter counter)
{
// have we already added it?
EnterpriseCounter existing = Find(counter.Name);
if(existing != null)
return;
// add it...
_lock.AcquireWriterLock(-1);
List.Add(counter);
ClearCache();
_lock.ReleaseWriterLock();
}
public void Remove(EnterpriseCounter counter)
{
_lock.AcquireWriterLock(-1);
List.Remove(counter);
ClearCache();
_lock.ReleaseWriterLock();
}
public new void Clear()
{
_lock.AcquireWriterLock(-1);
base.Clear();
ClearCache();
_lock.ReleaseWriterLock();
}
public new void RemoveAt(int index)
{
_lock.AcquireWriterLock(-1);
base.RemoveAt(index);
ClearCache();
_lock.ReleaseWriterLock();
}
public new int Count
{
get
{
_lock.AcquireReaderLock(-1);
int theCount = base.Count;
_lock.ReleaseWriterLock();
return theCount;
}
}
public EnterpriseCounter this[int index]
{
get
{
_lock.AcquireReaderLock(-1);
EnterpriseCounter theItem = (EnterpriseCounter)List[index];
_lock.ReleaseReaderLock();
return theItem;
}
set
{
_lock.AcquireWriterLock(-1);
List[index] = value;
ClearCache();
_lock.ReleaseWriterLock();
}
}
protected void ClearCache()
{
_lock.AcquireWriterLock(-1);
_cache = null;
_lock.ReleaseWriterLock();
}
protected void CheckCacheExists()
{
// lock...
_lock.AcquireReaderLock(-1);
// do we have it?
if(_cache == null)
{
// upgrade...
_lock.UpgradeToWriterLock(-1);
// create it...
_cache = new Hashtable();
foreach(EnterpriseCounter counter in InnerList)
_cache.Add(counter.Name.ToLower(), counter);
}
// unlock...
_lock.ReleaseLock();
}
public EnterpriseCounter Find(string name)
{
// do we have a cache?
CheckCacheExists();
// loop...
_lock.AcquireReaderLock(-1);
EnterpriseCounter found = (EnterpriseCounter)_cache[name.ToLower()];
_lock.ReleaseReaderLock();
// return...
return found;
}
public bool Exists(string name)
{
// do we have a cache?
CheckCacheExists();
// exists?
_lock.AcquireReaderLock(-1);
bool counterExists = _cache.Contains(name.ToLower());
_lock.ReleaseReaderLock();
// return...
return counterExists;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -