static void calculate(PoolAlgorithm alg)
 {
     for (int i = min, ii = 0; i <= max; i *= step, ii++)
     {
         for (int k = 0; k < numOfTests; k++)
         {
             tests[k] = measure(i, alg);
         }
         elapsedTime[ii, 2] = Math.Round(calcAvg(tests), 3);
     }
 }
        static double measure(int numOfElements, PoolAlgorithm alg)
        {
            alg.initArr(numOfElements);

            alg.findBase();

            List <int> basePrimes = alg.getBasePrime();

            CountdownEvent cnt = new CountdownEvent(basePrimes.Count);

            sw.Restart();
            for (int i = 0; i < basePrimes.Count; i++)
            {
                ThreadPool.QueueUserWorkItem(alg.perform, new object[] { basePrimes[i], cnt });
            }

            cnt.Wait();
            sw.Stop();

            return(sw.Elapsed.TotalMilliseconds + alg.sw.Elapsed.TotalMilliseconds);
        }