MemoryMappedFile Sınıfı
MemoryMappedFile her zaman using ile kullanılır.
CreateFromFile metodu - FileStream
Belirtilen stream belleğe yüklenir. Belleğe Map ismini verilir. Şöyle yaparız.
Şöyle yaparız.
Dosyanın belli bir kısmına MemoryMappedViewAccesssor (byte dizisi) şeklinde erişim imkanı tanır. Şöyle yaparız.
Accessor yerine MemoryMappedViewStream olarak tüm belleğe erişim sağlar. Şöyle yaparız.
İsmini bildiğimiz bir bellek alanına erişim sağlar. Şöyle yapılır.
Read ve Write metodları
mmf açıkdıktan sonra büyüklüğünü bildiğimiz nesneler şöyle okunur.
MemoryMappedFile her zaman using ile kullanılır.
CreateFromFile metodu - FileStream
Belirtilen stream belleğe yüklenir. Belleğe Map ismini verilir. Şöyle yaparız.
using (FileStream stream = new FileStream(...))
using (var mmf = MemoryMappedFile.CreateFromFile(stream, "Map", size,
MemoryMappedFileAccess.ReadWrite, null, HandleInheritability.None, true))
{...}
Dosyadan yüklemek için şöyle yaparız.using (var mmf = MemoryMappedFile.CreateFromFile(@"a.data", FileMode.Open,"Map"))
{...}
CreateFromFile metodu - StringŞöyle yaparız.
var filePath = @"D:\test.txt";
var fileSize = new FileInfo(filePath).Length;
var viewSize = fileSize
using (var mm = MemoryMappedFile.CreateFromFile(filePath,
FileMode.Open, null, 0, MemoryMappedFileAccess.Read))
using (var stream = mm.CreateViewStream(0, viewSize, MemoryMappedFileAccess.Read))
using (var reader = new StreamReader(stream, Encoding.UTF8))
{
reader.ReadLine();
}
CreateViewAccessor metoduDosyanın belli bir kısmına MemoryMappedViewAccesssor (byte dizisi) şeklinde erişim imkanı tanır. Şöyle yaparız.
long offset = 0x10000000; // 256 megabytes
long length = 0x20000000; // 512 megabytes
// Create a random access view, from the 256th megabyte (the offset)
// to the 768th megabyte (the offset plus length).
using (var accessor = mmf.CreateViewAccessor(offset, length))
{
...
}
CreateViewStream metoduAccessor yerine MemoryMappedViewStream olarak tüm belleğe erişim sağlar. Şöyle yaparız.
byte[] fileBytes = ...;
var viewStream = mmf.CreateViewStream();
viewStream.Write(fileBytes, 0, fileBytes.Length);
OpenExisting metoduİsmini bildiğimiz bir bellek alanına erişim sağlar. Şöyle yapılır.
// Assumes another process has created the memory-mapped file.
using (var mmf = MemoryMappedFile.OpenExisting("ImgA"))
{
using (var accessor = mmf.CreateViewAccessor(4000000, 2000000))
{...}
}
MemoryMappedViewAccessor SınıfıRead ve Write metodları
mmf açıkdıktan sonra büyüklüğünü bildiğimiz nesneler şöyle okunur.
int colorSize = Marshal.SizeOf(typeof(MyColor));
MyColor color;
// Make changes to the view.
for (long i = 0; i < length; i += colorSize)
{
accessor.Read(i, out color);
color.Brighten(10);
accessor.Write(i, ref color);
}
Hiç yorum yok:
Yorum Gönder