private void Stream_Parallel_ReadWrite(int dataSize, int nodeCount, int bufferSize, bool bench) { int iterations = 10; byte[] data = new byte[dataSize]; string name = Guid.NewGuid().ToString(); // Fill with random data Random r = new Random(); r.NextBytes(data); Stopwatch sw = new Stopwatch(); sw.Start(); for (int i = 0; i < iterations; i++) { using (SharedMemoryStream buffer = new SharedMemoryStream(name, nodeCount, bufferSize)) using (SharedMemoryStreamWriter <byte[]> writer = new SharedMemoryStreamWriter <byte[]>(buffer)) using (SharedMemoryStreamReader <byte[]> reader = new SharedMemoryStreamReader <byte[]>(buffer)) { Action wt = () => { writer.WriteObject(data); Debug.WriteLine("Write done.", "Information"); }; Action rd = () => { reader.ReadObject(); Debug.WriteLine("Read done.", "Information"); }; Task tWriter = Task.Factory.StartNew(wt); Task tReader = Task.Factory.StartNew(rd); if (!Task.WaitAll(new Task[] { tWriter, tReader }, 1200000)) { Assert.Fail("Reader or writer took too long"); } } } sw.Stop(); double dataRate = Math.Round(((double)iterations * dataSize) / sw.ElapsedMilliseconds, 2); if (bench) { Console.WriteLine(dataSize + ";" + dataRate + ";" + sw.ElapsedMilliseconds + ";" + nodeCount + ";" + bufferSize); } else { Console.WriteLine("Data Rate: " + dataRate + "kB/s (" + sw.ElapsedMilliseconds + "ms to write " + iterations + "x" + dataSize + "=" + iterations * dataSize + " bytes in " + nodeCount + "x" + bufferSize + "=" + nodeCount * bufferSize + ")"); } }
public void Stream_Object_ReadWrite() { string name = Guid.NewGuid().ToString(); DateTime expected = DateTime.Now; using (SharedMemoryStream buffer = new SharedMemoryStream(name)) using (SharedMemoryStreamWriter <DateTime> writer = new SharedMemoryStreamWriter <DateTime>(buffer)) using (SharedMemoryStreamReader <DateTime> reader = new SharedMemoryStreamReader <DateTime>(buffer)) { writer.WriteObject(expected); writer.Flush(); DateTime red = reader.ReadObject(); Assert.AreEqual(expected, red); } }
private void Stream_Parallel_Types_ReadWrite <T>(T data) { int iterations = 10; string name = Guid.NewGuid().ToString(); Stopwatch sw = new Stopwatch(); sw.Start(); for (int i = 0; i < iterations; i++) { using (SharedMemoryStream buffer = new SharedMemoryStream(name)) using (SharedMemoryStreamWriter <T> writer = new SharedMemoryStreamWriter <T>(buffer)) using (SharedMemoryStreamReader <T> reader = new SharedMemoryStreamReader <T>(buffer)) { Action wt = () => { writer.WriteObject(data); Debug.WriteLine("Write done.", "Information"); }; Action rd = () => { reader.ReadObject(); Debug.WriteLine("Read done.", "Information"); }; Task tWriter = Task.Factory.StartNew(wt); Task tReader = Task.Factory.StartNew(rd); if (!Task.WaitAll(new Task[] { tWriter, tReader }, 60000)) { Assert.Fail("Reader or writer took too long"); } } } sw.Stop(); double time = Math.Round(sw.ElapsedMilliseconds / (double)iterations, 2); Console.WriteLine("Time: " + time + "ms, Type: " + typeof(T).FullName); }