Почему я получаю Stream как System.IO.UnmanagedMemoryStream? - PullRequest
3 голосов
/ 27 мая 2009

У меня есть часть кода, подобная этой

        Assembly myAssembly = Assembly.GetExecutingAssembly();
        string[] names = myAssembly.GetManifestResourceNames();
        foreach (string file in names)
        {
            if (file.EndsWith(".dtd"))
            {
                // attach to stream to the resource in the manifest
                  dtdStream = myAssembly.GetManifestResourceStream(file);
                  MessageBox.Show(dtdStream.ToString());
            }                
        }

У меня есть все файлы dtd в папке «Ресурсы». Тип сборки Embedded Resource.
Теперь, когда я отлаживаю код, я получаю окно с сообщением System.IO.UnmanagedMemoryStream

Но я хочу Managed MemoryStream?
Что не так в моем коде?
Спасибо ...

Ответы [ 2 ]

8 голосов
/ 27 мая 2009

Ресурсы компилируются как часть сборки (EXE или DLL), что означает, что они загружаются в неуправляемую память, когда ОС запускает процесс. По этой причине любой поток, возвращаемый GetManifestResourceStream, должен быть неуправляемым (типа UnmanagedMemoryStream).

В чем проблема? Интерфейс MemoryStream и UnmanagedMemoryStream в основном идентичен, и отличается только (скрытая) функциональность, которая не должна иметь для вас никакого значения.

2 голосов
/ 27 мая 2009

Это поведение "по замыслу" и обеспечивает более быстрый доступ к памяти.

Ссылка: http://msdn2.microsoft.com/en-us/library/system.reflection.emit.modulebuilder.definemanifestresource(VS.85).aspx

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