Получить ресурс, не читая его полностью в память - PullRequest
0 голосов
/ 09 марта 2010

У меня есть приложение на Compact Framework, которое имеет несколько больших встроенных ресурсов (некоторые из них имеют размер несколько мегабайт). Я звоню assembly.GetManifestResourceStream(...), который возвращает Stream объект. Однако я заметил, что на некоторых устройствах этот вызов не только занимает много времени, но и приводит к тому, что устройству не хватает доступной памяти. В конце концов я использовал рефлектор для просмотра кода для этого метода на компактной платформе, и он использует внутренний метод для получения byte[] данных ресурса. Затем он возвращает эти данные, завернутые в MemoryStream.

Есть ли способ извлечь ресурс без использования этого вызова, так как он всегда будет считывать все в память? В идеале я хотел бы работать с Stream, к которому я могу получить произвольный доступ, не считывая все это в память (аналогично тому, как работает FileStream). Было бы неплохо, если бы я мог просто открыть FileStream на сборке и начать чтение с соответствующим смещением, но я сомневаюсь, что именно так встроены ресурсы.

Ответы [ 2 ]

0 голосов
/ 18 марта 2010

Я обнаружил инструмент с открытым исходным кодом, который предоставляет множество мета-метадан сборок и позволил мне получить доступ к ресурсу вручную: http://www.jbrowse.com/products/asmex/

0 голосов
/ 09 марта 2010

Не используйте встроенный ресурс. Добавьте его как файл содержимого и откройте его с диска потоком файлов.

...