У меня есть класс, который может открыть файлы, отображенные на память, читать и писать:утечки Предохраняйте карту памяти на повторную инициализацию
public class Memory
{
protected bool _lock;
protected Mutex _locker;
protected MemoryMappedFile _descriptor;
protected MemoryMappedViewAccessor _accessor;
public void Open(string name, int size)
{
_descriptor = MemoryMappedFile.CreateOrOpen(name, size);
_accessor = _descriptor.CreateViewAccessor(0, size, MemoryMappedFileAccess.ReadWrite);
_locker = new Mutex(true, Guid.NewGuid().ToString("N"), out _lock);
}
public void Close()
{
_accessor.Dispose();
_descriptor.Dispose();
_locker.Close();
}
public Byte[] Read(int count, int index = 0, int position = 0)
{
Byte[] bytes = new Byte[count];
_accessor.ReadArray<Byte>(position, bytes, index, count);
return bytes;
}
public void Write(Byte[] data, int count, int index = 0, int position = 0)
{
_locker.WaitOne();
_accessor.WriteArray<Byte>(position, data, index, count);
_locker.ReleaseMutex();
}
Обычно я использую это так:
var data = new byte[5];
var m = new Memory();
m.Open("demo", sizeof(data));
m.Write(data, 5);
m.Close();
Я хотел бы реализовать какую-то ленивую загрузку для открытия и захотеть открыть файл только тогда, когда я готов что-то там написать, например :
public void Write(string name, Byte[] data, int count, int index = 0, int position = 0)
{
_locker.WaitOne();
Open(name, sizeof(byte) * count); // Now I don't need to call Open() before the write
_accessor.WriteArray<Byte>(position, data, index, count);
_locker.ReleaseMutex();
}
Вопрос: когда я называю «Write» метод несколько раз (в цикле) это вызовет переменные-члены (как _locker) для повторной инициализации, и я хотел бы знать, - это безопасно, чтобы сделать это таким образом, может ли это вызвать утечку памяти или непредсказуемое поведение с помощью мьютекса?
https://msdn.microsoft.com/en-us/library/dd642331%28v=vs.110%29.aspx –