如何使用字典解决WP7中的内存不足异常?

rub*_*raj 0 c# dictionary exception-handling silverlight-4.0 windows-phone-7

我在WP7中构建了一个应用程序,我需要加载大约20000个硬编码数据({'a',"XYZ"},{'b',"mno"},....)我必须执行搜索.因此,我试图通过创建一个字典,使'a'作为键,值为"XYZ".一旦我的字典被填满,它就会给出Out of memory异常.考虑到我正在构建WP7应用程序,我怎样才能解决这个问题?或者除了使用字典之外还有其他方法吗?

Ste*_*ung 6

每当你将大量数据加载到手机上时,你做错了.首先,带宽问题会破坏你的应用程序.其次,内存问题已经杀死了你的应用.第三,CPU问题会杀死你的应用程序.结论是,您的用户最终会杀死您的应用.

推荐的解决方案:找到一种方法对数据进行分类,以便不是所有数据都必须下载到手机上.在您所属的服务器上进行处理(而不是在手机上).

如果您坚持在手机上处理如此多的数据,请先尝试管理下载大小.记住你在这里谈论的是手机,并不是所有地方都有最高3G的速度.尝试尽可能地压缩数据结构(例如,使用树来存储公共前缀).还要在下载之前尝试压缩数据.

然后积极计算每个对象的内存使用量.放入20,000个字符串很容易消耗大量内存.您希望尽可能减少每个对象内存使用量的大小.在你的例子中,你只是在那里放置字符串,所以我无法猜测你如何使用WP7应用程序允许的数十MB.但是,如果您不仅放置字符串,而且放置大对象,则计算字节数.

此外,积极管理fragementation.你会想要做的最后一件事是new Dictionary(),然后dict.Add(x,y);在一个for循环.当字典的内部表空间运行时,它将被分配到一个新的位置,整个字典被复制到新的位置,浪费了原始空间.你最终会有很多碎片化的内存空间.做一个new Dictionary(20000)或者什么来一次保留空间.