public unsafe void Test() { var pool = new DynamicMemoryPool(); uint blocksize = 234401; var pblock = (byte *)pool.Alloc(blocksize); var stream = new MemoryViewStream(); stream.Attach(pblock, blocksize); var data = new byte[blocksize]; for (var i = 0; i < data.Length; i++) { data[i] = (byte)i; } using (var writer = new BinaryWriter(stream, Encoding.UTF8, true)) { writer.Write(data, 0, data.Length); } if (stream.Position != stream.Length) { throw new Exception("Invalid position: " + stream.Position); } stream.Seek(0, SeekOrigin.Begin); if (stream.Position != 0) { throw new Exception("Invalid position: " + stream.Position); } using (var reader = new BinaryReader(stream, Encoding.UTF8, true)) { for (var i = 0; i < data.Length; i++) { //if (data[i] != *(pblock + i)) if (data[i] != reader.ReadByte()) { throw new Exception("Failed at " + i); } } } return; if (stream.Position != stream.Length) { throw new Exception("Invalid position: " + stream.Position); } stream.Position = 0; }
public unsafe void Test() { var pool = new DynamicMemoryPool(); uint blocksize = 234401; var pblock = (byte*)pool.Alloc(blocksize); var stream = new MemoryViewStream(); stream.Attach(pblock, blocksize); var data = new byte[blocksize]; for (var i = 0; i < data.Length; i++) { data[i] = (byte)i; } using (var writer = new BinaryWriter(stream, Encoding.UTF8, true)) { writer.Write(data, 0, data.Length); } if (stream.Position != stream.Length) { throw new Exception("Invalid position: " + stream.Position); } stream.Seek(0, SeekOrigin.Begin); if (stream.Position != 0) { throw new Exception("Invalid position: " + stream.Position); } using (var reader = new BinaryReader(stream, Encoding.UTF8, true)) { for (var i = 0; i < data.Length; i++) { //if (data[i] != *(pblock + i)) if (data[i] != reader.ReadByte()) { throw new Exception("Failed at " + i); } } } return; if (stream.Position != stream.Length) { throw new Exception("Invalid position: " + stream.Position); } stream.Position = 0; }
private void RebuildUnmanagedData() { var newpool = new DynamicMemoryPool(); Action <object> action = x => ((DocumentDataContainer)x).MigrateRAM(newpool); var tasks = m_documentDataContainers.Values.Select(x => { var x1 = x; return(new Task(action, x1)); }).ToArray(); try { try { foreach (var t in tasks) { t.Start(); } Task.WaitAll(tasks); } catch { newpool.Dispose(); throw; } try { m_memoryPool.Dispose(); } finally { m_memoryPool = newpool; } } catch { foreach (var c in m_documentDataContainers.Values) { c.MarkAsInvalid(); } throw; } }
public unsafe void TestMethod1() { //var segmentSize = 1000000U; var chunkSize = 1000U; //var pool = new FixedMemoryPool(segmentSize); var pool = new DynamicMemoryPool(); Action test = () => { for (var i = 0; i < 1000000; i++) { if (i % 100000 == 0) { Console.Write("Step " + i); Console.Write(" : "); } //pool.Free(pool.Alloc(chunkSize)); pool.Alloc(chunkSize); } }; var threads = new Task[12]; for (var i = 0; i < threads.Length; i++) { threads[i] = new Task(test, TaskCreationOptions.LongRunning); } foreach (var task in threads) { task.Start(); } foreach (var task in threads) { task.Wait(); } Console.ReadLine(); }
private void RebuildUnmanagedData() { var newpool = new DynamicMemoryPool(); Action<object> action = x => ((DocumentDataContainer)x).MigrateRAM(newpool); var tasks = m_documentDataContainers.Values.Select(x => { var x1 = x; return new Task(action, x1); }).ToArray(); try { try { foreach (var t in tasks) { t.Start(); } Task.WaitAll(tasks); } catch { newpool.Dispose(); throw; } try { m_memoryPool.Dispose(); } finally { m_memoryPool = newpool; } } catch { foreach (var c in m_documentDataContainers.Values) { c.MarkAsInvalid(); } throw; } }