Verwendung Griff zurückgegeben von Win32 API Createfile (C ++, P / Invoke) anfällig für NET Garbage Collection funktioniert ein Filestream-Objekt (.NETCF, C #) erstellt

StackOverflow https://stackoverflow.com/questions/1055195

Frage

AKTUALISIERT FRAGE

Da der Ctor wird nicht unterstützt durch .NETCF (public Filestream (IntPtr Griff, Fileaccess-Zugriff). Könnten Sie bitte andere Möglichkeiten vorschlagen gibt große Datei im Speicher zwischen verwalteten und nicht verwalteten Code auf einer begrenzte Ressource (RAM) Plattform. Grundsätzlich ich möchte die Datei im oberen Bereich von 2 GB Benutzerraum (Win CE 5.0), die außerhalb des Prozessraums / Heap abzubilden. Wie kann ich das in C #.

Auch tun Memory Objekte Raum in Haufen oder in Speicher abgebildeten Region auf Win CE 5.0?

zuteilen

Dank ...

Original Frage

Ich bin ein Filestream-Objekts (.NETCF, C #) mit einer Datei-Handle zurückgegeben, von Muttercreatefile (), wie unten Instanziierung:

    //P/Invoke    
    [DllImport("coredll.dll", SetLastError = true)]
    public static extern IntPtr CreateFile(string lpFileName,
                                            uint dwDesiredAccess,
                                            uint dwShareMode,
                                            IntPtr lpSecurityAttributes,
                                            uint dwCreationDisposition,
                                            uint dwFlagsAndAttributes,
                                            IntPtr hTemplateFile);
// File handle received from native Win32 API
IntPtr ptr= CreateFile("myfile.txt",
                         0,
                         0,
                         0,
                         FileMode.Create,
                         0, 
                         IntPtr.Zero);

//Instantiate a FileStream object using handle (returned above) as parameter.
FileStream fs = new FileStream(ptr,FileAccess.ReadWrite);

Die Datei zu groß> 500 KB wachsen oder mehr . Also, meine Fragen sind:

* 1) Gibt es etwas falsch mit dieser Art und Weise, Dinge zu tun gegeben, dass Safefilehandle / Griffeigenschaften nicht in .NETCF Version unterstützt? Gibt es einen besseren Weg, es zu tun (ich plane mit Filestream / Memory nativen Speicher abgebildeten Datei-Handle zu verwenden)?

2) Ist der Speicher zugewiesen von Filestream-Objekt fällt unter .NETCF Garbage Collector? Oder da Griff einer Memory-Mapped-Datei mit nativen API erstellt, es (verwaltete Filestream-Objekt und seine Ressourcen) ist aus Zuständigkeitsbereich der Garbage Collector? *

Vielen Dank im Voraus.

War es hilfreich?

Lösung

Insgesamt gibt es nichts falsch mit diesem Ansatz der Verwendung eines nativen Datei erstellen und es in einem Filestream-Objekt gewickelt wird. Dies ist eine unterstützte Funktion von Filestream.

n Bezug auf die Garbage Collection obwohl es wirklich zwei Dinge hier im Spiel.

  1. Der Speicher mit dem Filestream-Objekt zugeordnet ist. Ja, das wird Müll gesammelt werden
  2. Der Griff, der eine Ressource mit Createfile erstellt ist. Das Filestream-Objekt wird das Eigentum an diesem Griff nehmen und es wird frei, wenn er angeordnet ist (passiv oder aktiv).

Andere Tipps

Nach der Dokumentation , der Konstruktor Sie planen über die Verwendung ist in .NET CF nicht zur Verfügung.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top