序言:我正在生產大型數據陣列的重負載應用程序中工作。什麼更快,更方便:散列表或字典<int, double>()?
我寫了下面的類
using System;
using System.Collections;
using System.Collections.Generic;
namespace CSharpSampleApplication.Data.CoreObjects
{
[Serializable]
public class CalcItem
{
public CalcItem()
{
_additional = new Hashtable();
}
private readonly Hashtable _additional;
public bool ContainsKey(int id)
{
return _additional.ContainsKey(id);
}
public void Add(int id, double value)
{
_additional.Add(id, value);
}
public DateTime Date { get; set; }
public object this[int id]
{
get
{
return _additional[id];
}
}
}
}
然後,在另一個類,我做管理器,它包含以下內容:
public List<CalcItem> CalcItems{ get; private set;}
private readonly Dictionary<string, int> _keys;
private int _index;
private readonly object _lock = new object();
public int GetIndex(string key)
{
lock (_lock)
{
if (_keys.ContainsKey(key))
return _keys[key];
else
{
_index++;
_keys.Add(key, _index);
return _index;
}
}
}
通過使用這些類我記錄一些實時數據,例如像這個:
var clc = new CalcItem();
clc.Date = DateTime.Now;
clc.Add(_calcItemManager.GetIndex("testData"), r.Next()/100.00);
clc.Add(_calcItemManager.GetIndex("testData1"), r.Next()/100.00);
i++;
if (i % 25 == 0)
{
clc.Add(_calcItemManager.GetIndex("testData2"), r.Next()/100.00);
clc.Add(_calcItemManager.GetIndex("testData3"), r.Next()/100.00);
clc.Add(_calcItemManager.GetIndex("testData4"), r.Next()/100.00);
clc.Add(_calcItemManager.GetIndex("testData5"), r.Next()/100.00);
}
_calcItemManager.Add(clc);
所以管理器存儲[string key] - [int index] bindings for所有的計算項目。
現在的問題是: 使用Dictionary<int, double>
而不是Hashtable()來優化內存使用和更快的性能是更好嗎? 列表項 - 包含約1,000,000記錄 CalcItem.Additional - 含有約5 - 10記錄
最好!雙列表 - 令人難以置信的想法 - 請參閱我的答案和新的CalcItem類!非常感謝。 – skaeff 2010-10-23 08:40:04