C# 在从文件读取时使用内存流的好处

C# 在从文件读取时使用内存流的好处,c#,.net,email,memorystream,C#,.net,Email,Memorystream,我最近在看一段代码,该代码使用将文件附加到电子邮件。当前的实现是将附件作为文件存储到存储设备,并给它一个唯一的名称。然后将此文件附加到以下文件中: Attachment data = new Attachment(filename); message.Attachments.Add(data); 然后发送电子邮件,然后从存储设备中删除文件 将文件存储在MemoryStream(已经存在)中,然后将其作为附件传递到电子邮件中,不是更快/更好吗?我可以想象,在MailMessage类的某个地方,文

我最近在看一段代码,该代码使用将文件附加到电子邮件。当前的实现是将附件作为文件存储到存储设备,并给它一个唯一的名称。然后将此文件附加到以下文件中:

Attachment data = new Attachment(filename);
message.Attachments.Add(data);
然后发送电子邮件,然后从存储设备中删除文件

将文件存储在MemoryStream(已经存在)中,然后将其作为附件传递到电子邮件中,不是更快/更好吗?我可以想象,在MailMessage类的某个地方,文件被读入一个流,并以同样的方式发送,而将其存储到磁盘的整个过程是完全不必要的


我的直觉。。。写入磁盘是完全不必要的,应该实现使用流。(我错了吗?

是的,最好避免将其写入磁盘,除非出于其他原因需要执行该步骤。
Attachment
类可以将流和文件名作为其构造函数的参数,而不是为其提供物理文件路径


是的,最好避免将其写入磁盘,除非出于其他原因需要执行该步骤。
Attachment
类可以将流和文件名作为其构造函数的参数,而不是为其提供物理文件路径


当然可以<代码>附件甚至有一个构造函数,它接受一个流和一个名称,因此将文件写入磁盘可以完全删除。

当然<代码>附件< /代码>甚至有一个流和名称的构造函数,所以将文件写入磁盘完全可以被删除。

虽然这是绝对可能的,但在进行更改之前,先考虑两件事:1。依恋作为记忆流存在的时间。2.如果不写文件的话要长得多,那么系统邮件吞吐量和内存压力也会增加。

虽然这是绝对可能的,但在做出改变之前,先考虑两件事:1。依恋作为记忆流存在的时间。2.如果在不写入文件的情况下,它会相当长,那么您的系统邮件吞吐量和由此产生的内存压力也会相当大。

看起来它是在同一个方法中读取和删除的。不过,这是一个很好的观点。它看起来像是在同一个方法中读取和删除的。不过,这是一个很好的观点。我知道有一个流版本,只是看看实现者是否在思考我忽略的东西。或者他们只是不了解流,但处理原始文件更为熟悉,所以他们选择了这条路。@cgatian很可能是后者。我唯一能想到的先将其写入文件的原因是为了存档/备份/故障安全。我知道有一个流版本,只是看看实现者是否在考虑我忽略的事情。或者他们只是不了解流,但处理原始文件更为熟悉,所以他们选择了这条路。@cgatian很可能是后者。我能想到的唯一先将其写入文件的原因是为了存档/备份/故障安全。