2012-06-01 2 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