【问题标题】:Memory Stream vs File Stream for static content download用于静态内容下载的内存流与文件流
【发布时间】:2017-04-03 18:20:39
【问题描述】:

我有一个场景,上传的每个可能属于任何 MIME 类型的文件都应该被加密,而当用户想要下载时,它们应该被解密。

为此,我解密了一个请求的文件并将该文件保存在一个临时位置。 我的解密方法通过读取加密的文件流写入文件流。

现在我应该更改我的算法以将加密的文件流保存到内存流 并直接从内存流下载,而不是写入文件流并下载该文件。

就性能而言,在这种情况下,文件流或内存流会更好。

我在想,如果多个用户请求多个大文件,假设 100 个不同的用户请求了 100 个不同的文件。在这种情况下,内存可能会耗尽,我们可能会遇到一些不必要的麻烦。

我应该实施哪一个。

【问题讨论】:

  • 您是否考虑过使用类似 EFS 之类的东西,在 IO 链的上层处理磁盘加密?这样您就无需将应用程序逻辑与文件加密相关联。
  • @Dai 我不知道 EFS。感谢您提供有关此信息的信息,我将与系统管理员协商并寻找适合我的方案的可能性。

标签: c# asp.net .net algorithm


【解决方案1】:

您是否考虑过直接流式传输到NetworkStream 进行输出?您将不需要内存和磁盘空间。如果您希望通过将BufferedStream 中的数据作为中间缓冲来获得更高的性能。

如果您不能选择直接流式传输或缓冲流式传输,则正确答案取决于您的要求。您需要知道文件的大小和预期的请求数量。如果您认为您的 Web 服务器内存可以处理它并且您需要增加性能,那就去吧。否则你应该在硬盘上缓冲。请记住:您只需要足够的性能,而不是完美的性能。

【讨论】:

  • NetworkStream 不适合我。目前我们只允许有限大小的文件(小于 50MB),我们预计每小时的文件请求少于 100 个。在这种情况下,我们的服务器可以处理这个问题。因此,我应该选择 MemoryStream。
猜你喜欢
  • 2014-07-11
  • 2018-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多