如何在桌面应用程序上使用.Net Framework 4对代码进行基准测试

时间:2012-09-01 20:37:11

标签: c# desktop-application benchmarking

我已经编写了我的桌面应用程序,但有时候它有点慢,所以我试图尽可能地优化它。麻烦是我不知道如何。

以下是我对

有疑问的代码
if (((mainRibbonForm)Parent.Parent.Parent.Parent.Parent.Parent.Parent)).myParentScopeVar == false)
{
   //something goes here

}

//VS

if (myLocalScopeVar == false)
{
    //something goes here
}

所有对象都是在mainRibbonForm中创建并分配的,似乎我无法调用这样的东西。

mainRibbonForm.myparentScopeVar == false

因此,在最后一个对象中,我只是向后走,使用Parent命令变量来获取变量。

我不确定是否应该始终查看变量的父作用域,或者将变量作为localscope分配给最后一个控件,并且仅在父作用域变量更改时更新它,这不常见,但它确实如此。变化

我在定时器中有一些这些并且在代码中的每个地方都有用。我对C#很新,我将所有内容从VB.Net翻译成C#我只是想学习编程的正确或最佳实践C#

哪个更快,使用的资源更少?

下次我如何自己进行基准测试?

1 个答案:

答案 0 :(得分:1)

我认为这段代码看起来有点过分和可怕:

if (((mainRibbonForm)Parent.Parent.Parent.Parent.Parent.Parent.Parent)).myParentScopeVar == false)
{
   //something goes here   
}

而不是这个,我更喜欢使用静态变量,然后使用mainRibbonForm.myParentScopeVar来调用它。所以你可以在你的课程中插入它:

public static bool myParentScopeVar;

或者你可以通过构造函数传递这个布尔值。


如果你想做基准测试,可以使用高分辨率计时器的Stopwatch类来测量你的代码运行的时间,并循环你正在测试的代码更多次以获得包括他的中等时间最佳和最差表现:

Stopwatch timer = new Stopwatch();
timer.Start();

for(int i = 0; i < 1000; i++)
{
    if (((mainRibbonForm)Parent.Parent.Parent.Parent.Parent.Parent.Parent)).myParentScopeVar == false)
    {
         //something goes here   
    }
}

timer.Stop();  
TimeSpan timespan = timer.Elapsed;

MessageBox.Show(String.Format("{0:00}:{1:00}:{2:00}", timespan.Minutes, timespan.Seconds, timespan.Milliseconds / 10));    

timer.Restart();

for(int i = 0; i < 1000; i++)
{
    if (myLocalScopeVar == false)
    {
         //something goes here
    }
}

timer.Stop();  
TimeSpan timespan = timer.Elapsed;

MessageBox.Show(String.Format("{0:00}:{1:00}:{2:00}", timespan.Minutes, timespan.Seconds, timespan.Milliseconds / 10)); 

我认为我的解决方案和使用myLocalScopeVar的第二个解决方案效率更高。