1

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

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

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

4

2 回答 2

5

Windows Mobile 设备上的内存非常紧张——使用它确实是一个痛苦的世界。首先,一个进程的总内存是(如果我没记错的话)32 MB。现在,它不仅被代码内内存分配填满,而且还被从 DLL、EXE 等加载的代码填满。

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

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

于 2009-03-23T14:21:03.877 回答
0

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

您说“在尝试下载文档时”也许您将它们保存在内存中并且您得到了异常。

于 2009-03-23T14:21:03.173 回答