Список C# <Поток> располагает/закрывает

Это веб-приложение установлено ниже каких-либо других приложений в дереве каталогов веб-сайта? Проверьте любого родителя web.config файлы для других настроек, если таковые имеются. Кроме того, сделайте Ваш свой каталог, установлен как каталог приложения в IIS.

6
задан PeteT 4 December 2009 в 16:25
поделиться

5 ответов

Почему бы не создать класс StreamCollection, реализующий IDisposable:

public class StreamCollection : Collection<Stream>, IDisposable { }

В методе Dispose этого класса вы можете перебрать все потоки и правильно закрыть / удалить каждый поток. Тогда ваш код будет выглядеть так:

using (var reports = new StreamCollection())
{
   //looping code for each users set of reports
   reports.Add(ReportSource.ReportDocument.ExportToStream(PortableDocFormat));
   //end looping codeSmtpClient 

   smtpClient = new SmtpClient(host, port);
   MailMessage message = new MailMessage(from, to, subject, body);

   foreach (Stream report in reports)
   {    
      message.Attachments.Add(new Attachment(report, "application/pdf"));
   }

   smtpClient.Send(message);
}
20
ответ дан 8 December 2019 в 04:08
поделиться

Вы можете создать DisposableList, который можно обернуть в оператор using:

public class DisposableList<T> : List<T>, IDisposable where T : IDisposable {

    // any constructors you need...

    public void Dispose() {
        foreach (T obj in this) {
            obj.Dispose();
        }
    }
}
4
ответ дан 8 December 2019 в 04:08
поделиться

Выполнение Flush () / Close () не причинит никакого вреда. Если вы хотите быть абсолютно уверенным, вам следует выполнить using оператор:

using (Stream stream = ReportSource.ReportDocument.ExportToStream(PortableDocFormat))
{
    reports.Add(stream);
    stream.Flush();  //unsure
}

Таким образом, исключения не повлияют на ваш код.

0
ответ дан 8 December 2019 в 04:08
поделиться

Зависит от того, будут ли потоки использоваться позже при создании вложения. Я предполагаю, что это так, а это значит, что вы захотите избавиться от потоков в конце.

Не забудьте попробовать-наконец это. В противном случае они не будут удалены при возникновении исключения.

1
ответ дан 8 December 2019 в 04:08
поделиться

Я не вижу логики в закрытии потоков сразу после добавления их в список. Судя по предоставленному вами коду, ссылки на эти потоки используются в других местах. Если ручьи закрыты, то какая польза от них?

1
ответ дан 8 December 2019 в 04:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: