Windows Mobile中的.net Out of Memory异常 - 如何解决这个问题?

时间:2009-03-24 15:47:48

标签: .net email windows-mobile memory-management compact-framework

我目前正在使用CF.NET在Windows Mobile中编写一个小应用程序。

该应用程序的行为与电子邮件应用程序非常相似,即我使用POP3从我的邮件服务器帐户下载邮件和附件,以存储在存储卡上,以便使用MIME工具进行进一步处理。 / p>

我的问题是下载大型附件,因为在某个时刻我得到一个OutOfMemory异常。我通过阅读前几天here on SO发表的以下问题和答案,找到了一些有趣的事情。由于我的附件可达4-5MB(mp3歌曲),我意识到我有严重的问题。然而,同时Pocket Outlook能够下载高达4-5MB的mp3歌曲而没有任何问题(使用WIFI连接)所以必须有办法实现它!

目前,我将下载缓冲区(转换为字符串)保存为一个简单的字符串变量。我尝试将缓冲区的内容添加到stringbuilder中,但我仍然得到OutOfMemory-exceptions。

我可以采取什么策略/技术来克服这个问题?

1 个答案:

答案 0 :(得分:10)

每当您处理大量数据时,您都希望确保不会立即将整个内容保存在内存中。

您下载的管道是一个流,因此您可以以块的形式加载数据。将文件写入磁盘时,您有一个流,因此您可以一次写入一个块。

考虑将拖拉机拖车卸入仓库。使用你的stringbuilder解决方案,你基本上会说,“我将站在预告片的后面,我希望你把拖车的全部内容装到我的怀里,然后我会把它带进仓库” 。你会受到负荷的压迫!你想要的是,“把我交给我,实际上可以随身携带,然后我将它带入仓库,然后再回来进行下一次加载”。