为什么我将Stream作为System.IO.UnmanagedMemoryStream?

时间:2009-05-27 19:32:20

标签: c# resources assemblies stream

我有一部分像这样的代码

        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文件。它有构建类型嵌入式资源 现在,当我调试代码时,我收到一个显示System.IO.UnmanagedMemoryStream

的消息框

但我想要一个Managed MemoryStream?
我的代码有什么问题?
感谢...

2 个答案:

答案 0 :(得分:8)

资源被编译为程序集(EXE或DLL)的一部分,这意味着它们在OS启动进程时被加载到非托管内存中。这就是为什么GetManifestResourceStream返回的任何流必须非托管(类型为UnmanagedMemoryStream)的原因。

无论如何,这有什么问题? MemoryStreamUnmanagedMemoryStream的界面基本相同,只是(隐藏)功能有所不同,这对您来说不应该有任何后果。

答案 1 :(得分:2)

这是一种“按设计”行为,可以更快地访问内存。

参考:http://msdn2.microsoft.com/en-us/library/system.reflection.emit.modulebuilder.definemanifestresource(VS.85).aspx