public void measureThis(ref scenario sce) { Console.WriteLine("measureThis " + sce.desc); if (sce.root == null) { return; } Console.WriteLine(sce.compressCode); MemoryStream memStream = null; var times = new List <long>(SampleCount); var timesRead = new List <long>(SampleCount); var timesFileWrite = new List <long>(SampleCount); var timesFileRead = new List <long>(SampleCount); var timesFileSSDWrite = new List <long>(SampleCount); var timesFileSSDRead = new List <long>(SampleCount); var sw = new Stopwatch(); long streamLength = 0; for (var j = 0; j < SampleCount; j++) { //memStream = new MemoryStream(buffer); // THIS IS BROKEN in .Net so far as toArray(). memStream = new MemoryStream(); // doing a warm run for JIT first with no measure might improve consistency of results.. as well. //{ // trying to make benchmark a little more consistent. // GC.Collect(); // System.Threading.Thread.Sleep(100); //} sw.Reset(); sw.Start(); sce.writer(memStream); sw.Stop(); times.Add(sw.ElapsedMilliseconds); var writtenBuffer = memStream.ToArray(); //Console.WriteLine("writtenBuffer.Length {0}", writtenBuffer.Length); streamLength = writtenBuffer.Length; //var b = memStream.GetBuffer(); //Buffer.BlockCopy(buffer, 0, buffer2, 0, (int)streamLength); //str.Close(); // read stream stuff. if (sce.read != null) { //var ms2 = new MemoryStream(buffer, 0, (int)streamLength); // our captured buffer as read stream. var ms2 = new MemoryStream(writtenBuffer); // our captured buffer as read stream. sw.Reset(); sw.Start(); var r = sce.read(ms2); r.stream.Close(); sw.Stop(); r.root = null; timesRead.Add(sw.ElapsedMilliseconds); } if (!string.IsNullOrEmpty(sce.fqFileName)) { //Console.WriteLine(sce.fqFileName); // write file test sw.Reset(); sw.Start(); using (var fs = File.Open(sce.fqFileName, FileMode.Create)) { sce.writer(fs); } sw.Stop(); timesFileWrite.Add(sw.ElapsedMilliseconds); if (sce.read != null) { // read file test sw.Reset(); sw.Start(); using (var fs = new FileStream(sce.fqFileName, FileMode.Open, FileAccess.Read)) { sce.read(fs); } sw.Stop(); timesFileRead.Add(sw.ElapsedMilliseconds); } var ssdFile = @"C:\" + sce.fqFileName; // write file test sw.Reset(); sw.Start(); using (var fs = File.Open(ssdFile, FileMode.Create)) { sce.writer(fs); } sw.Stop(); timesFileSSDWrite.Add(sw.ElapsedMilliseconds); if (sce.read != null) { // read file test sw.Reset(); sw.Start(); using (var fs = new FileStream(ssdFile, FileMode.Open, FileAccess.Read)) { sce.read(fs); } sw.Stop(); timesFileSSDRead.Add(sw.ElapsedMilliseconds); } } } //Console.WriteLine("memStream.Length"); //Console.WriteLine(memStream.Length); sce.writtenSize = streamLength; sce.counter(); sce.writeDuration = (long)Math.Floor(times.Average()); if (timesRead.Count == SampleCount) { sce.readDuration = (long)Math.Floor(timesRead.Average()); } sce.writeFileDuration = (long)Math.Floor(timesFileWrite.Average()); sce.readFileDuration = (long)Math.Floor(timesFileRead.Average()); sce.writeFileSSDDuration = (long)Math.Floor(timesFileSSDWrite.Average()); sce.readFileSSDDuration = (long)Math.Floor(timesFileSSDRead.Average()); sce.sampleCount = SampleCount; }