- Является ли предложение using в методе AddFileToManipulate () избыточным и ненужным?
Хуже, это разрушительно. Вы в основном закрываете свой поток памяти до того, как он будет добавлен. Подробности смотрите в других ответах, но, в основном, распоряжайтесь в конце, а не в любое другое время. Каждое использование с объектом приводит к тому, что удаление происходит в конце блока, даже если объект «передается» другим объектам с помощью методов.
- Очищаю ли я все в порядке в методе Dispose () моего объекта?
Да, но вы делаете жизнь сложнее, чем нужно. Попробуйте это:
foreach (var stream in this.pdfDocumentStreams)
{
stream.Dispose();
}
this.pdfDocumentStreams.Clear();
Это работает так же хорошо, и намного проще. Удаление объекта не удаляет его - он просто сообщает ему освободить его внутренние неуправляемые ресурсы. Вызов метода dispose для объекта в этом случае вполне допустим - объект остается невыбранным в коллекции. Вы можете сделать это, а затем очистить список одним выстрелом.
- Является ли это «приемлемым» использованием MemoryStream? Я не ожидаю очень много файлов в памяти одновременно ... Скорее всего, 1-10 всего страниц PDF, каждая страница около 200 КБ. Приложение предназначено для работы на сервере, поддерживающем сайт ASP.NET.
Это зависит от вашей ситуации. Только вы можете определить, будут ли проблемы с размещением этих файлов в памяти причиной ваших проблем. Это будет довольно тяжелый объект, поэтому я буду использовать его осторожно.
- Любые комментарии / предложения?
Реализация финализатора. Это хорошая идея, когда вы внедряете IDisposable. Кроме того, вам следует переделать реализацию Dispose в стандартную или пометить класс как закрытый. Подробнее о том, как это сделать, см. в этой статье. В частности, у вас должен быть метод, объявленный как protected virtual void Dispose(bool disposing)
, который вызовет ваш метод Dispose и ваш финализатор.