如何在C#中测量HashTable的性能?

Sup*_*zed 1 c# comparison performance hashtable list

我正在玩C#集合,我决定编写一个快速测试来衡量不同集合的性能.

我的性能测试是这样的:

int numOps= (put number here);
long start, end, numTicks1, numTicks2;
float ratio;

start = DateTime.Now.Ticks;

for(int i = 0; i < numOps; i++)
{
  //add two elements to collection #1
  //remove one element from collection #1
}

end = DateTime.Now.Ticks;

numTicks1 = end - start;


start = DateTime.Now.Ticks;

for(int i = 0; i < numOps; i++)
{
  //add two elements to collection #2
  //remove one element from collection #2
}

end = DateTime.Now.Ticks;

numTicks2 = end - start;

ratio = (float)numTicks2/(float)numTicks1;
Run Code Online (Sandbox Code Playgroud)

然后我使用不同的集合比较比率值和numOps的不同值来比较它们的比较方式.

问题是有时当我使用足够小的数字(numOps = 500)时,Hashtable和List之间的测试结果是零星的(换句话说,它是一个硬币翻转,其中一个更快).谁能解释为什么会这样?

编辑:谢谢大家!秒表就像一个魅力.

Sta*_* R. 8

尝试看看StopWatch类而不是使用DateTime

这个例子直接来自MSDN

    Stopwatch stopWatch = new Stopwatch();
    stopWatch.Start();
    Thread.Sleep(10000); //your for loop
    stopWatch.Stop();
    // Get the elapsed time as a TimeSpan value.
    TimeSpan ts = stopWatch.Elapsed;

    // Format and display the TimeSpan value.
    string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}",
        ts.Hours, ts.Minutes, ts.Seconds,
        ts.Milliseconds / 10);
    Console.WriteLine(elapsedTime, "RunTime");
Run Code Online (Sandbox Code Playgroud)

  • 静态方法`Stopwatch.StartNew()`将初始化一个新的秒表并启动它的计时,省去你必须手动启动它. (3认同)