DataSet和DataTable都实现了IDisposable,因此,通过传统的最佳实践,我应该调用它们的Dispose()方法.
但是,从我到目前为止所读到的,DataSet和DataTable实际上并没有任何非托管资源,因此Dispose()实际上并没有做太多.
另外,我不能只使用,using(DataSet myDataSet...)因为DataSet有一组DataTables.
所以,为了安全起见,我需要遍历myDataSet.Tables,处理每个DataTable,然后处理DataSet.
那么,在我的所有DataSet和DataTables上调用Dispose()是否值得麻烦?
附录:
对于那些认为应该处理DataSet的人:通常,处理的模式是使用usingor try..finally,因为你想保证将调用Dispose().
然而,这对于一个集合来说真的很快.例如,如果对Dispose()的一个调用抛出异常,你会怎么做?你吞下它(这是"坏"),以便你可以继续处理下一个元素?
或者,你是否建议我只调用myDataSet.Dispose(),而忘记在myDataSet.Tables中处理DataTables?
我们的项目将文件存储在sql server db中作为blob.我想从数据库中获取文件并将多个文件附加到电子邮件而无需写入磁盘.
这是我到目前为止(一切正常,没有附件):
// snip
List<System.Net.Mail.Attachment> attachments = null;
// Attachments is a child list of Messagebody object holding Attachment ids
MessageBody.Attachments = MessageBodyAttachmentList.GetMessageBodyAttachmentList(this.MessageBody.ID);
if (MessageBody.Attachments != null && MessageBody.Attachments.Count > 0)
{
attachments = new List<Attachment>();
foreach (Library.Entity.Messaging.MessageBodyAttachment att in MessageBody.Attachments)
{
using (MemoryStream memoryStream = new MemoryStream())
{
// create a new attachment
Library.Attachments.Attachment attachment = Library.Attachments.Attachment.GetAttachment(att.AttachmentID);
byte[] contentAsBytes = attachment.FileData;// FileData holds byte[] that is the contents of the file
memoryStream.Write(contentAsBytes, 0, contentAsBytes.Length);
memoryStream.Seek(0, SeekOrigin.Begin);
// …Run Code Online (Sandbox Code Playgroud) attachment ×1
c# ×1
dataset ×1
datatable ×1
dispose ×1
email ×1
idisposable ×1
smtp ×1
stream ×1
using ×1