C#:什么是最好的集合类来存储非常相似的字符串项,以便有效地序列化到文件

时间:2010-03-24 10:15:23

标签: c# serialization collections

我想将outlook电子邮件的entityID列表存储到文件中。 entityID是字符串,如:

“000000005F776F08B736B442BCF7B6A7060B509A64002000” “000000005F776F08B736B442BCF7B6A7060B509A84002000” “000000005F776F08B736B442BCF7B6A7060B509AA4002000”

你可以注意到,字符串非常相似。我想将这些字符串保存在一个集合类中,当我将其序列化为文件时,该集合类将尽可能高效地存储。你知道任何可用于此的集合类吗?

提前感谢您提供任何信息...... 格里

3 个答案:

答案 0 :(得分:8)

框架中没有预先存在的集合类将满足您的需求,因为它们是通用的:根据定义,它们不知道它们存储的类型(例如string),因此它们无法对其进行任何操作。

如果高效序列化是您唯一关注的问题,我建议您只需压缩序列化文件即可。像这样的数据是压缩算法的盛宴。 .NET在System.IO.Compression中提供了gzip和deflate算法;可以通过Google轻松找到更好的算法(如果您需要)。

如果内存效率也存在问题,您可以将字符串存储在trieradix tree中。

答案 1 :(得分:4)

您可能需要查看Radix Trie数据结构,因为这样可以有效地存储您的密钥。

就序列化到文件而言,您可以走路,然后记下每个节点。 (在下面的示例中,我使用缩进来表示树中的级别,但是您可以提出更高效的内容,例如使用控制字符来表示下降或上升。)

00000000
  5F776F08B736B442BCF7B6A7060B509A
    64002000
    84002000
    A4002000
  6F776F08B736B442BCF7B6A7060B509A
    32100000

以上示例是:

的集合
000000005F776F08B736B442BCF7B6A7060B509A64002000
000000005F776F08B736B442BCF7B6A7060B509A84002000
000000005F776F08B736B442BCF7B6A7060B509AA4002000
000000006F776F08B736B442BCF7B6A7060B509A32100000

答案 2 :(得分:-3)

为什么有效率问题?您想使用尽可能少的高清空间(高清空间便宜)。 在C#中有2个最常用的序列化器: BinaryXML

如果您希望用户使用记事本调整文件 - 例如>使用xml。如果不使用二进制