我有一个WCF REST 服务作为 Azure 存储的端点。 WCF REST 服务处理通常为 5-10 MB 的文件的上传和下载。 处理流(下载和上传)时,字节位于 Azure VM RAM 内存中,对吧?即使上传数据被分成 4 MB block ,这 4 MB 也会保留在RAM 内存,直到上传完成。对于下载,字节将被保留直到下载完成。 因此,如果我有 1000 个用户同时下载文件,则意味着 Azure VM 应该有 4 GB RAM 仅用于传输。
有办法优化这个吗?当我假设数据保存在虚拟机 RAM 中直到操作完成时,如果我错了,请纠正我。我应该使用 Microsoft 的 Azure REST 服务吗?在传输完成之前,该服务将数据保存在哪里?
最佳答案
我认为您可以通过做几件事来避免将所有数据同时存储在内存中。
- 设置您的 WCF 服务以使用流式 TransferMode
- 在代码中适当处理您的流。即,打开流到BLOB存储,然后从WCF流复制到 block 中的BLOB流,或者使用Stream.CopyTo() .
大约 6 个月前,我尝试实现此功能,但在我的情况下无法使 WCF 流模式正常工作。开始工作似乎很挑剔,并且可能无法使用 HTTP 端点。话又说回来,也许我的 WCF-fu 太弱了。如果你确实得到了一些东西,请将其发布回此处,因为我非常希望看到它。
请注意,如果您有多个客户端同时下载相同的数据,您可以在内存中保留一个副本并将其独立地流式传输给每个客户端。但我不认为这种方法与我刚才描述的方法兼容 - 你必须选择其中之一。
关于rest - 如何使用 WCF 服务作为 Azure 存储的端点来优化大文件事务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9656695/