Exemple #1
0
 /// <summary>
 /// Display scheduler.
 /// </summary>
 /// <param name="writeScheduler"></param>
 static void DisplayScheduler(IWriteScheduler writeScheduler)
 {
     lock (writeScheduler.SyncRoot)
     {
         int priority = 0;
         foreach (DeviceInfo device in writeScheduler.ToArray())
         {
             Console.WriteLine("[{0}] si [{1}]={2}", DateTime.Now.ToFileTime(), priority++, device);
         }
     }
 }
Exemple #2
0
        /// <summary>
        /// Run test program.
        /// </summary>
        /// <param name="program"></param>
        static void Run(SchedulerType schedulerType, string deviceFolder, int fileCount, int taskCount)
        {
            // Report program options
            Console.WriteLine("[{0}] pi scheduler type = {1}", DateTime.Now.ToFileTime(), schedulerType);
            Console.WriteLine("[{0}] pi device folder = {1}", DateTime.Now.ToFileTime(), deviceFolder);
            Console.WriteLine("[{0}] pi file count = {1}", DateTime.Now.ToFileTime(), fileCount);
            Console.WriteLine("[{0}] pm {1}kb", DateTime.Now.ToFileTime(), GC.GetTotalMemory(true) / 1024);

            FileGenerator   fileGenerator  = GetFileGenerator();
            IWriteScheduler writeScheduler = CreateWriteScheduler(schedulerType);

            foreach (IDevice device in GetDevices(new DirectoryInfo(deviceFolder)))
            {
                Console.WriteLine("[{0}] pi register device {1}", DateTime.Now.ToFileTime(), device.Id);
                writeScheduler.Register(device);
            }


            // Test using sequential writes.
            Console.WriteLine("[{0}] pm {1}kb", DateTime.Now.ToFileTime(), GC.GetTotalMemory(true) / 1024);
            DisplayScheduler(writeScheduler);
            foreach (Tuple <string, byte[]> current in fileGenerator.GetFiles(fileCount))
            {
                writeScheduler.Write(current.Item1, current.Item2);
                DisplayScheduler(writeScheduler);
            }
            Console.WriteLine("[{0}] pm {1}kb", DateTime.Now.ToFileTime(), GC.GetTotalMemory(true) / 1024);

            // Test using concurrent writes.
            Task[] tasks = new Task[taskCount];
            for (int i = 0; i < tasks.Length; i++)
            {
                tasks[i] = new Task(() =>
                {
                    foreach (Tuple <string, byte[]> current in fileGenerator.GetFiles(fileCount))
                    {
                        writeScheduler.Write(current.Item1, current.Item2);
                        DisplayScheduler(writeScheduler);
                    }
                });
                tasks[i].Start();
            }
            Task.WaitAll(tasks);
        }