static void DoBenchmarkBatchedLoremIpsum(EventLog benchLog, long batchSize, long totalSteps, long loremIpsumLength)
        {
            Stopwatch sw = new Stopwatch();

            sw.Start();

            //  loremIpsumLength should be less equal than 65535.
            loremIpsumLength = loremIpsumLength > 65535 ? 65535 : loremIpsumLength;

            Console.WriteLine("events\tWorking Set(MB)\tPrivate Memory(MB)\tPage File(MB)\tTotal CPU Usage\tDisk Time");
            TotalCPUCounter  cpuCounter  = new TotalCPUCounter();
            var              text        = LoremIpsum.ASCIIText();
            Encoding         e           = System.Text.Encoding.GetEncoding("UTF-8");
            string           result      = new String(text.TakeWhile((c, i) => e.GetByteCount(text.Substring(0, i + 1)) <= loremIpsumLength).ToArray());
            DiskUsageCounter diskCounter = new DiskUsageCounter();
            MonitorProcesses monitor     = new MonitorProcesses(cpuCounter, diskCounter);

            long batchNum    = batchSize / BINNUM;
            long residualNUM = batchSize % BINNUM;

            for (int i = 0; i < totalSteps; i++)
            {
                DateTime targetTime  = DateTime.Now;
                long     currentTime = GetUnixTime(targetTime);

                Console.Write(String.Format("{0, 8}", i * batchSize));
                Task.Run(() => monitor.Run());

                for (int j = 0; j < BINNUM; j++)
                {
                    for (int k = 0; k < batchNum; k++)
                    {
                        // Write an informational entry to the event log.
                        benchLog.WriteEntry(result);
                    }
                    //Thread.Sleep(10);
                }
                for (int j = 0; j < residualNUM; j++)
                {
                    benchLog.WriteEntry(result);
                }

                while (GetUnixTime(DateTime.Now) <= currentTime)
                {
                    Thread.Sleep(1);
                }
            }

            sw.Stop();
            Console.Write(String.Format("{0, 8}", totalSteps * batchSize));
            monitor.Run();
            Console.WriteLine(String.Format("Flow rate: {0} events per second.", (totalSteps * batchSize) / (float)(sw.ElapsedMilliseconds / 1000.0)));

            Console.WriteLine("Message written to event log.");
        }
        static void DoBenchmarkLoremIpsum(EventLog benchLog, int waitMSec, long totalEvents, long loremIpsumLength)
        {
            Stopwatch sw = new Stopwatch();

            sw.Start();

            //  loremIpsumLength should be less equal than 65535.
            loremIpsumLength = loremIpsumLength > 65535 ? 65535 : loremIpsumLength;

            Console.WriteLine("events\tWorking Set(MB)\tPrivate Memory(MB)\tPage File(MB)\tTotal CPU Usage\tDisk Time");
            TotalCPUCounter  cpuCounter  = new TotalCPUCounter();
            var              text        = LoremIpsum.ASCIIText();
            Encoding         e           = System.Text.Encoding.GetEncoding("UTF-8");
            string           result      = new String(text.TakeWhile((c, i) => e.GetByteCount(text.Substring(0, i + 1)) <= loremIpsumLength).ToArray());
            DiskUsageCounter diskCounter = new DiskUsageCounter();
            MonitorProcesses monitor     = new MonitorProcesses(cpuCounter, diskCounter);

            for (int i = 0; i < totalEvents / 10; i++)
            {
                if (i % 10 == 0)
                {
                    Console.Write(String.Format("{0, 8}", i * 10));
                    Task.Run(() => monitor.Run());
                }

                // Write an informational entry to the event log.
                benchLog.WriteEntry(result);
                benchLog.WriteEntry(result);
                benchLog.WriteEntry(result);
                benchLog.WriteEntry(result);
                benchLog.WriteEntry(result);
                benchLog.WriteEntry(result);
                benchLog.WriteEntry(result);
                benchLog.WriteEntry(result);
                benchLog.WriteEntry(result);
                benchLog.WriteEntry(result);
                Thread.Sleep(waitMSec);
            }
            sw.Stop();
            Console.Write(String.Format("{0, 8}", totalEvents));
            monitor.Run();
            Console.WriteLine(String.Format("Flow rate: {0} events per second.", totalEvents / (float)(sw.ElapsedMilliseconds / 1000.0)));

            Console.WriteLine("Message written to event log.");
        }