Освобождение основного потока, возвращаемого Application.GetResourceStream в WP7 - PullRequest
5 голосов
/ 01 июня 2011

При доступе к ресурсу с использованием Application.GetResourceStream он возвращает экземпляр класса StreamResourceInfo, этот класс не реализует IDisposable.

Должен ли я закрыть \ удалить базовый поток, предоставляемый StreamResourceInfo, когда я закончу обработку потока на устройстве WP7 - я не хочу знать о Using или шаблоне Dispose.

Примером может быть использование метода для доступа к ZIP-файлу, который содержится в пакете ZAP, и как только я разархивирую файл, мне больше не нужен экземпляр Stream.

Ответы [ 3 ]

3 голосов
/ 01 июня 2011

В приведенном примере кода здесь не используются using, Close() или Dispose().

Поскольку в документации для StreamResourceInfo не упоминается Close() или Dispose()StreamResourceInfo на самом деле не наследуется от Stream или чего-либо еще, что может реализовать эти методы), я думаю, чтоможно просто позволить объекту выйти из области видимости и собрать мусор естественным образом.

Я подозреваю, что класс StreamResourceInfo имеет финализатор, который вызывает Dispose() базового объекта Stream во время сбора мусора, нов данный момент у меня нет копии Reflector, чтобы это проверить.Шаблон IDisposable довольно устойчив в этом отношении.

Однако, если вам все еще некомфортно с таким уровнем неопределенности, вы всегда можете вызвать Close() для объекта Stream.

0 голосов
/ 01 июня 2011

Using автоматически вызывает метод удаления после достижения конца области using. Итак, вы могли бы сделать что-то вроде этого. Как только будет достигнут конец области, ваш поток будет удален.

 using (var stream = Application.GetResourceStream(new Uri("myResource.zip", UriKind.Relative)).Stream)
 {
       //stream code
 }

РЕДАКТИРОВАТЬ - Перемещение ответов от комментариев сюда: StreamResourceInfo не несет ответственности за закрытие / удаление потока. Если вы не передадите этот поток другому объекту (например, StreamReader), то ваша задача - закрыть поток. Найдена ссылка, которая может представлять интерес , которая в значительной степени соответствует этому.

0 голосов
/ 01 июня 2011

Я не знаю конкретно о телефоне Windows 7, но стандартная практика заключается в удалении объекта, и он автоматически закрывает поток, если он открывается.Удаление должно быть последней операцией на объекте, тогда как close указывает на возможность повторного открытия.Так что, на мой взгляд, вы должны пойти на избавление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...