2009-05-27 3 views
3

나는 형을 포함 리소스를 구축가 folder.Which 내 자원에서 나는 모든 DTD 파일이이스트림을 System.IO.UnmanagedMemoryStream으로 가져 오는 이유는 무엇입니까?

 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()); 
      }     
     } 

같은 코드의 일부를 가지고있다.
이제 코드를 디버그하면 System.IO.UnmanagedMemoryStream을 표시하는 메시지 상자가 나타납니다

하지만 Managed MemoryStream을 원하십니까?
내 코드가 잘못 되었나요?
감사합니다 ...

+0

왜 관리되는 메모리 스트림이 필요합니까? –

답변

8

리소스는 어셈블리 (EXE 또는 DLL)의 일부로 컴파일되므로 OS가 프로세스를 시작할 때 관리되지 않는 메모리에로드됩니다. 따라서 GetManifestResourceStream에 의해 반환되는 모든 스트림은 비 관리 (UnmanagedMemoryStream)이어야합니다.

어쨌든이 문제가 무엇인가요? MemoryStreamUnmanagedMemoryStream의 인터페이스는 기본적으로 동일하며, 차이가있는 (숨겨진) 기능 일 뿐이며 어떤 결과도 초래해서는 안됩니다.

+0

가능한 경우 GetManifestResourceStream에 의해 반환 된 스트림을 관리되는 것으로 가져올 수 있습니까? 그렇다면 어떻게? –

+0

@crazy_itgal : 그렇습니다.하지만 예쁘지는 않을 것이며, 제가 상상할 수있는 (그리고 오버 헤드 만 생기는) 장점이 없습니다. (정확히 무엇이 도움이 될 것이라고 생각하십니까?) 어쨌든 기본적인 방법은 Entired UnmanagedMemoryStream을 읽고 모든 것을 MemoryStream 객체에 쓰는 것입니다. – Noldorin

+0

리소스 스트림에서 이미지를 읽어야하는 경우 UnmanagedMemoryStream을 사용하여 MemoryStream을 생성자의 매개 변수로만 받아 들일 수있는 BitmapImage를 초기화해야합니다. – ziyuang

관련 문제