看到
CSLA.NET3.5 中很多次使用了HybridDictionary,性能极佳,就研究了一下。其定义如下:
HybridDictionary 类特别适合在不清楚集合大小的情况下使用。它利用了 ListDictionary 处理小集合时性能改善的优点,同时也可灵活地切换到处理较大集合时能力比 ListDictionary 更好的 Hashtable。其构造函数接受一个布尔值参数,该参数使用户可以指定在比较字符串时集合是否忽略大小写。
在使用 HybridDictionary 是也非常方便,可以用 DictionaryEntry, IDictionaryEnumerator,或直接用 hDic("key") 的形式进行各种操作。请参考 MSDN 示例
HybridDictionary 另一个优点是可以进行 Serialization. 代码如下:
使用SoapFormatter 时要引用 System.Runtime.Serialization.Formatters.Soap.dll
[Serializable]
public class HybridDictionary : IDictionary, ICollection, IEnumerable
public class HybridDictionary : IDictionary, ICollection, IEnumerable
HybridDictionary 类特别适合在不清楚集合大小的情况下使用。它利用了 ListDictionary 处理小集合时性能改善的优点,同时也可灵活地切换到处理较大集合时能力比 ListDictionary 更好的 Hashtable。其构造函数接受一个布尔值参数,该参数使用户可以指定在比较字符串时集合是否忽略大小写。
在使用 HybridDictionary 是也非常方便,可以用 DictionaryEntry, IDictionaryEnumerator,或直接用 hDic("key") 的形式进行各种操作。请参考 MSDN 示例
HybridDictionary 另一个优点是可以进行 Serialization. 代码如下:
using
System.Collections;
using System.Collections.Specialized;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization.Formatters.Soap;
public class TestHybridDictionary
{
private void SerializationTest()
{
HybridDictionary hd = new HybridDictionary();
hd.Add("keyA", "Value01");
hd.Add("keyB", "Value02");
FileStream fs = new FileStream(@"c:/bs.data", FileMode.Create);
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(fs, hd);
fs.Close();
FileStream fs02 = new FileStream(@"c:/ss.data", FileMode.Create);
SoapFormatter sf = new SoapFormatter();
sf.Serialize(fs02, hd);
fs02.Close();
}
}
using System.Collections.Specialized;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization.Formatters.Soap;
public class TestHybridDictionary
{
private void SerializationTest()
{
HybridDictionary hd = new HybridDictionary();
hd.Add("keyA", "Value01");
hd.Add("keyB", "Value02");
FileStream fs = new FileStream(@"c:/bs.data", FileMode.Create);
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(fs, hd);
fs.Close();
FileStream fs02 = new FileStream(@"c:/ss.data", FileMode.Create);
SoapFormatter sf = new SoapFormatter();
sf.Serialize(fs02, hd);
fs02.Close();
}
}
使用SoapFormatter 时要引用 System.Runtime.Serialization.Formatters.Soap.dll