2014-03-26 34 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