protected override void HashSampleSet(ref ProcessCounters counters)
        {
            var lastCount     = 0;
            var unchangedTics = 0;

            var threadWorker = new ManagedThreadPoolWorker();

            threadWorker.AddWork(TaskList);

            threadWorker.ProcessAllWorkItems(ref counters);


            while (counters.ProcessedItems < NumberOfItemsToProcess && unchangedTics < WaitBufferInTics)
            {
                if (lastCount == counters.ProcessedItems && lastCount > 0)
                {
                    unchangedTics++;
                }

                lastCount = counters.ProcessedItems;

                if (unchangedTics == WaitBufferInTics)
                {
                    Console.WriteLine("Exiting all pending work has been completed. Warning some items have not been processed!");
                }

                Thread.Sleep(1000);
            }
        }
Esempio n. 2
0
        public void InitializeThreadPool(ref ProcessCounters counter)
        {
            InternalCounter = counter;

            TaskScheduler = new Thread(() =>
            {
                while (WorkQueue.Any())
                {
                    Thread activeThread;

                    lock (WorkQueue)
                    {
                        activeThread = PrepareNewThread(WorkQueue.Peek());

                        if (activeThread != null)
                        {
                            WorkQueue.Dequeue();
                        }
                    }

                    if (activeThread == null)
                    {
                        Thread.Sleep(100);
                        continue;
                    }

                    activeThread.Start();
                }
            });

            TaskScheduler.Start();
        }
Esempio n. 3
0
        public SampleResult RunSampleTest(int sampleSize)
        {
            Console.WriteLine($"Attempting to hash [{sampleSize}] values in stress test:");
            Console.WriteLine();

            TaskList = CreateWorkTasks(sampleSize);
            var stopwatch = new StopwatchWorker();

            stopwatch.Start();

            var processCounters = new ProcessCounters();

            HashSampleSet(ref processCounters);

            stopwatch.Stop();
            var result = new SampleResult
            {
                NumberOfThreads = processCounters.ThreadCount,
                SucceededItems  = processCounters.SuccessCount,
                FailedItems     = processCounters.FailureCount,
                Duration        = stopwatch.ElapsedTime()
            };

            DisplayWorker.DisplayResultSummary(result.SucceededItems, result.FailedItems, result.NumberOfThreads, result.Duration);

            return(result);
        }
Esempio n. 4
0
        public void ProcessAllWorkItems(ref ProcessCounters counter)
        {
            InternalCounter = counter;
            ThreadsUsed     = new List <int>();

            while (WorkQueue.Any())
            {
                lock (WorkQueue)
                {
                    var workItem = WorkQueue.FirstOrDefault();
                    ProcessWorkItem(workItem);
                }
            }
        }
        protected override void HashSampleSet(ref ProcessCounters counters)
        {
            counters.ThreadCount++;

            foreach (var task in TaskList)
            {
                try
                {
                    task.Execute();
                    counters.SuccessCount++;
                }
                catch (Exception ex)
                {
                    counters.FailureCount++;
                    Console.WriteLine(ex);
                }
            }
        }
Esempio n. 6
0
        //TODO: Task Parallel Libriary (TPL) - Task Based Asynchronous Programming
        //https://msdn.microsoft.com/en-us/library/dd537609(v=vs.110).aspx

        protected override void HashSampleSet(ref ProcessCounters counters)
        {
            throw new NotImplementedException();
        }
Esempio n. 7
0
 protected abstract void HashSampleSet(ref ProcessCounters counters);