Example #1
0
        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;
        }