2012-09-01 27 views
0

我已经编写了我的桌面应用程序,但有时候它有点慢,所以我正试图尽可能优化它。麻烦是我不知道如何。如何在桌面应用程序上使用.Net Framework 4来标记代码

这里是我对

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 

因此,尽管在最后一个对象,我只是向后走去抢使用父命令变量的变量。

我不确定是否应该始终查看变量的父范围或将变量作为localscope分配给最后一个控件,并且只在父范围变量发生更改时更新它(这不是很常见),但它确实会改变。

我有一些定时器和peppered在代码中的每一个地方..我对C#非常新,我将所有从VB.Net翻译到C#我只是想学习正确的或编程的最佳实践在C#

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

如何在下一次对自己进行基准测试?

回答

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更有效。

+0

我刚刚试过你的解决方案,我得到00:00:00作为两者的回报,这是否意味着他们同样快?我甚至在for循环中将它们撞到了5000个,运行时它根本不需要任何时间。 –

+1

好吧,我只是增加了循环到500000,我得到了00:00:21在第一,00:00:00秒。 –

相关问题