2014-03-26 36 views
1

这是一个非常简单的问题。MemoryStream:本地还是不是?

C#MemoryStream是否保存客户端或服务器上的数据?

例如我有一个表单,当发布时将一个文件上传到我的s3存储桶,但是在它将文件读入内存流之前。如果该文件必须首先上传到服务器并保存在服务器上的MemoryStream,那么这很糟糕,我需要重新考虑我的解决方案。

如果MemoryStream是客户端本地的,那么这很好。

+2

内存流背后的内存是C#代码运行的地方。所以它是本地的,它甚至不知道有一台服务器。 – CodesInChaos

+0

你的C#是本地的。 “MemoryStream”意味着它在内存中。鉴于无法确定您的服务器正在运行的是什么...... C#只能更改客户端。因此内存是指LOCAL。 – Aron

+1

或者你有关于ASP.NET webforms的一些非常混淆的假设?这里的客户端是JavaScript和服务器C#?在这种情况下,内存流将分配到您的服务器上,而不是在亚马逊的服务器上,而不是在浏览器中。 – CodesInChaos

回答

6

MemoryStream将数据保存在系统内存(RAM)中。所以它将在任何计算机上运行代码。

在这种情况下,您似乎在说您的服务器端代码正在使用MemoryStream来存放来自表单POST的数据。通常最好将文件保存到磁盘上的临时位置,而不是试图将整个文件保存在内存中。或者,如果您希望接受真正的大文件,而且您不需要执行任何中间处理,则可以直接向s3执行直通流。这样做的危险在于,如果上传无法完成,则可能需要更多努力来确保正确清理内容。

+0

所以当我发布一个文件到我的WebApi,当它加载它进入MemoryStream,这是服务器上的RAM? – r3plica

+0

@ r3plica:正确。 – StriplingWarrior