2012-06-01 17 views
0

我最近在查看一段使用System.Net.Mail.Attachment將文件附加到電子郵件的代碼。當前的實現是將附件作爲文件存儲到存儲設備並給它一個唯一的名稱。該文件然後被附加到MailMessage如下:然後從文件讀取使用存儲流的好處

Attachment data = new Attachment(filename); 
message.Attachments.Add(data); 

電子郵件被髮送和文件,然後從存儲裝置中刪除。

對於只存儲在MemoryStream中的文件(它已經是這樣)不是更快/更好,然後只是將它作爲附件傳遞給電子郵件?我會想象MailMessage類中的某個地方正在將文件讀入流中並以相同的方式發送,並且將其存儲到磁盤的整個過程完全沒有必要。

我的直覺......寫入磁盤是完全unnessarry和使用流應實施。 (我錯了嗎?)

回答

4

是的,最好避免寫入磁盤,除非出於某種其他原因需要執行此步驟。 Attachment類可以將流和文件名作爲其構造函數的參數,而不是給它一個物理文件路徑。

http://msdn.microsoft.com/en-us/library/6sdktyws.aspx

+0

我知道有一個流版本,只是看到實施者是否正在考慮我忽略的某些內容。或者他們只是不理解流,但使用原始文件更熟悉,所以他們走上了這條路。 – cgatian

+0

@cgatian最有可能的是後者。我認爲首先將它寫入文件的唯一原因是歸檔/備份/失敗安全。 –

0

當然可以; Attachment甚至有一個構造函數需要一個流和一個名字,所以將文件寫入磁盤可以完全刪除。

0

雖然這是完全可能的,但在做出更改之前請考慮兩件事:1.附件作爲MemoryStream存在的時間。 2.如果沒有寫入文件會更長,那麼系統的郵件吞吐量和內存壓力也會增加。

+0

它看起來像是用相同的方法讀取和刪除所有內容。但非常好的一點。 – cgatian

相關問題