【发布时间】:2012-11-08 17:26:59
【问题描述】:
我需要从 WCF 服务器返回一个大字节数组。
问题是 - 为了返回这样一个数组 - 我需要创建一个 - 当创建这样一个数组时 - 它会自动进入大对象堆 - 这意味着当服务受到压力时 - 我得到一个内存使用和管理方面的真正问题。
我曾考虑使用非托管内存来避免使用大型托管字节数组 - 但仍然 - 如何从 WCF 服务返回这样的数组?
是否有任何方法可以从不包括实际创建托管字节数组的 WCF 服务返回字节“流”?我知道 WCF 本身使用 BufferManager - 所以如果它只是读取我的非托管内存并在发送之前使用它的缓冲区管理来存储它 - 我希望不会有问题。
【问题讨论】:
-
能否尝试将其写入文件并让客户端下载该文件?
-
是的,您可以返回
Stream。你为什么不试试呢。 -
ryadavilli - 我担心从文件中写入和读取 1. 在某些情况下不安全(当数据敏感时)和 2. 需要 IO,这在性能方面很糟糕跨度>
-
L.B - 返回 UnmanagedMemoryStream 是不可能的 - 为了返回 MemoryStream - 它必须由字节数组支持...
-
@RoyReznik FileStream 也是流 :) 您还可以实现自己的流,它不会一次将所有数据加载到内存中。
标签: c# .net wcf memory large-object-heap