C# 如何在移动设备上管理大型数据集

C# 如何在移动设备上管理大型数据集,c#,algorithm,data-structures,windows-phone-7,indexing,C#,Algorithm,Data Structures,Windows Phone 7,Indexing,我目前正在实施一本日语词典,并希望就如何快速有效地查找词条提供一些想法。词典条目本身被加载并存储在一个类中,该类包含日语单词(可能有多种拼写)、语音发音和英语定义三个列表 我最初有一个树结构,每个节点代表一个单词中的一个字符。这是非常快,但不幸的是使用了大量的内存。定义数据本身约为35meg,树结构本身约为130meg。此外,它还只允许从日语->英语中查找。内存是一个值得关注的问题,因为除了需要额外的索引外,Windows Phone 7版本的应用程序也将存在。这本词典有150000条词条 总而

我目前正在实施一本日语词典,并希望就如何快速有效地查找词条提供一些想法。词典条目本身被加载并存储在一个类中,该类包含日语单词(可能有多种拼写)、语音发音和英语定义三个列表

我最初有一个树结构,每个节点代表一个单词中的一个字符。这是非常快,但不幸的是使用了大量的内存。定义数据本身约为35meg,树结构本身约为130meg。此外,它还只允许从日语->英语中查找。内存是一个值得关注的问题,因为除了需要额外的索引外,Windows Phone 7版本的应用程序也将存在。这本词典有150000条词条

总而言之,这就是我需要做的: 存储定义列表 在这个列表中有三个索引,分别是日语、语音和英语的含义。 查找速度要快(最好少于1秒) 使用尽可能少的内存(Windows Phone 7上的内存使用限制为90meg)


你应该考虑使用移动数据库或Web服务来处理移动设备上的大量数据。您想要的性能、功能和管理在任何平台上都很难实现,但您不必这样做。使用具有适当索引和表的数据库(本地或远程)

SQL CE不适用于WP7,但有商业版和开源版。此外,如果您希望频繁连接,并且有一定的等待时间,请考虑使用Web服务。您可以使用通过web服务提供给您的中央服务器上选择的任何数据库。您的瓶颈可能是通信,但您会从受限制的设备上卸载大量处理。

  • 最简单的解决方案是:客户端只接受输入,然后向服务器端发送请求,服务器端将输出返回给客户端。
  • 另一种方法是使应用程序脱机:
  • 日语单词的列表应该按照字典顺序进行排序,其他两个列表也是如此。
  • 因为日语有50个字母,所以列表可以根据单词的前两个字母分成50*50部分。所以关键是:准备一个50*50的数组,记录文件中前两个字母起始位置对应的偏移量。如果使用32位整数来存储偏移量,将花费10KB。
  • 对于每个日语单词,将偏移量存储在其他两个列表中。为了方便起见,这两个列表可以组合在一起。如果使用32位整数存储偏移量,并且您有150000个条目,则会将数据大小增加600KB。
  • 将偏移量数组保存在内存中,当输入一个日语单词时,首先根据前两个字母找出偏移量,然后从前两个字母开始读取所有日语单词。因为你有150000个条目,所以平均来说,以相同两个字母开头的单词数量是60个。一个内存页是4KB,足以容纳60个字,所以只需要1个IO。在其他两个列表中找到偏移量后,读取相应的内容。因此,在搜索操作中只需要2个IO。而且计算成本也很小,内存成本也很低。
非常感谢您的评论。我怀疑数据库或web服务可能是实现我所需功能的最佳方式。我将查看WP7上可用的各种选项,看看它们提供了什么。“SQL CE不适用于WP7”=>尚未提供,将成为WP7.5(Mango)的一部分。