คำถามที่อัปเดต
เนื่องจาก .NETCF ไม่รองรับ ctor (public FileStream (ตัวจัดการ IntPtr, การเข้าถึง FileAccess) คุณช่วยแนะนำวิธีอื่นในการแชร์ไฟล์ขนาดใหญ่ในหน่วยความจำระหว่างโค้ดที่ได้รับการจัดการและไม่ได้รับการจัดการบนแพลตฟอร์มทรัพยากร (RAM) ที่จำกัด โดยพื้นฐานแล้วฉันต้องการ แมปไฟล์ในพื้นที่ด้านบนของพื้นที่ผู้ใช้ 2GB (Win CE 5.0) นอกพื้นที่กระบวนการ / ฮีป ฉันจะทำสิ่งนั้นใน C # ได้อย่างไร
นอกจากนี้วัตถุ MemoryStream จะจัดสรรพื้นที่ในฮีปหรือในพื้นที่ที่แมปหน่วยความจำบน Win CE 5.0 หรือไม่
ขอบคุณ...
คำถามเดิม
ฉันกำลังสร้างอินสแตนซ์ FileStream Object (.NETCF , C#) โดยใช้ตัวจัดการไฟล์ที่ส่งคืนโดย CreateFile() ดั้งเดิมดังต่อไปนี้:
//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);
ไฟล์จะขยายเป็นขนาดใหญ่ > 500 KB หรือมากกว่า ดังนั้นคำถามของฉันคือ:
*1) มีอะไรผิดปกติกับวิธีการนี้หรือไม่ เนื่องจากคุณสมบัติ SafeFileHandle / Handle ไม่ได้รับการสนับสนุนในเวอร์ชัน .NETCF มีวิธีอื่นที่ดีกว่านี้หรือไม่ (ฉันกำลังวางแผนที่จะใช้ตัวจัดการไฟล์ที่แมปหน่วยความจำดั้งเดิมกับ FileStream / MemoryStream)
2) หน่วยความจำที่จัดสรรโดยวัตถุ FileStream อยู่ภายใต้ตัวรวบรวมขยะ .NETCF หรือไม่ หรือเนื่องจากหมายเลขอ้างอิงนั้นเป็นไฟล์ที่แมปหน่วยความจำที่สร้างขึ้นโดยใช้ API ดั้งเดิม มัน (ออบเจ็กต์ FileStream ที่ได้รับการจัดการและทรัพยากรของมัน) อยู่นอกขอบเขตของตัวรวบรวมขยะ ?*
ขอบคุณล่วงหน้า.