使用Web服务的SQL CE OutOfMemoryException

时间:2009-03-23 14:14:20

标签: web-services windows-mobile windows-ce

尝试通过Web服务下载文档时,我们不断收到OutOfMemory异常。我们将文档字节数组数据存储为序列化消息对象的一部分,原始文档的大小均为~500kb。消息对象图中唯一的另一个东西是两个用于关联的字符串属性。

我们已尝试检索压缩和解压缩的文档,但问题相同。现在我相信在尝试反序列化消息时引发了异常,而不是在下载流时引发异常。

我知道这是一个模糊的问题,但是你们中的任何一个人都知道是什么原因引起的吗?此处传输的数据量似乎非常小,并且在传输时设备上几乎没有其他事情发生。

2 个答案:

答案 0 :(得分:5)

Windows Mobile设备上的内存非常紧张 - 这真的是一个痛苦的世界。首先,一个进程的总内存是(如果我没记错的话)32 MB。现在不仅填充了代码内存分配,而且填充了DLL,EXE等代码。

现在,当您将500KB下载到字节数组中时,它不仅需要500KB。它需要500KB的CONTIGUOUS MEMORY,一旦应用程序运行一段时间,它就不太可能找到。

我的建议是直接使用HttpRequest而不是Web服务下载文件。也许Web服务可以传回您需要的URL或类似的东西。但是直接下载文件,你可以用块处理它 - 读取8K,然后将8K写入磁盘,然后再读取8K等等。

答案 1 :(得分:0)

为了获得OutOfMemory异常,代码要么有一个消耗内存的错误,直到设备不再存在,或者设备通常没有足够的内存来处理甚至500Kb的变化。

你说“在尝试下载文档时”可能会将它们保存在内存中并且你会得到例外。