我们有一个用C#编写的.NETCF 3.5应用程序,我们使用一些相当大的列表和对象字典,填充来自SQL Server的数据并持久保存到设备上的SQLCE数据库。
应用程序运行良好,直到最近。数据量使得我们经常会出现内存异常。使用Hibernate事件,我已经确认操作系统确实要求应用程序释放资源(Hibernate事件不断被触发)。问题是我真的没有看到任何可以释放的实质内容 - 应用程序正在使用列表和词典等。
我知道Mobile 5/6中存在32 MB / app的严格限制(实际上只有18-20 MB,每http://dev.fittingsites.com/bol/2008/windows-mobile-6-1-memory-management-changes}。
我在这里有点不知所措。如果应用程序需要大约25 MB才能运行,它如何在Mobile 5上运行?是否存在变通方法,例如在内存映射文件或类似内容中存储列表或词典,这些变量不需要大量工作(或者需要大量工作)?
答案 0 :(得分:1)
您使用哪种方法从SQLCE数据库中读取数据? SQLCE提供两种主要方法:DataSets和ResultSets。众所周知,DataSet会消耗大量内存并降低应用程序性能。如果您使用的是DataSet,我建议您尝试将应用程序切换为使用RecordSet。有关详细信息,请参阅this page。