C# 如何在桌面应用程序上使用.Net Framework 4标记代码

C# 如何在桌面应用程序上使用.Net Framework 4标记代码,c#,desktop-application,benchmarking,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

我已经编写了我的桌面应用程序,但它有时有点慢,所以我正在尽可能地优化它。问题是我不知道怎么做

这是我有疑问的代码

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
在最后一个对象中,我只是向后走,使用父命令变量获取变量

我不确定是否应该始终查看变量的父作用域,或者将该变量作为本地作用域分配给最后一个控件,并且仅在父作用域变量更改时更新它,虽然这种情况并不经常发生,但它确实会更改

我在计时器中有一些这样的东西,并且在代码中的每一个地方都有。。我对C语言非常陌生,我把VB.Net中的所有东西都翻译成了C语言。我只是想学习用C语言编程的正确或最佳实践#

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


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

我认为这段代码太过分了,很可怕:

if (((mainRibbonForm)Parent.Parent.Parent.Parent.Parent.Parent.Parent)).myParentScopeVar == false)
{
   //something goes here   
}
与此相反,我更喜欢使用静态变量,然后使用
mainRibbonForm.myParentScopeVar
调用它。因此,您可以在类中插入以下内容:

public static bool myParentScopeVar;
或者您可以通过构造函数传递这个布尔值


如果要进行基准测试,请使用高分辨率计时器类来测量代码将运行多长时间,并循环测试更多次的代码,以获得包含其最佳和最差性能的中间时间:

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)); 
秒表计时器=新秒表();
timer.Start();
对于(int i=0;i<1000;i++)
{
if(((mainRibbonForm)Parent.Parent.Parent.Parent.Parent.Parent.Parent)).myParentScopeVar==false)
{
//这里有些东西
}
}
timer.Stop();
TimeSpan TimeSpan=计时器。已用时间;
Show(String.Format(“{0:00}:{1:00}:{2:00}”)、timespan.Minutes、timespan.Seconds、timespan.millizes/10);
timer.Restart();
对于(int i=0;i<1000;i++)
{
if(myLocalScopeVar==false)
{
//这里有些东西
}
}
timer.Stop();
TimeSpan TimeSpan=计时器。已用时间;
Show(String.Format(“{0:00}:{1:00}:{2:00}”)、timespan.Minutes、timespan.Seconds、timespan.millizes/10);

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

我刚刚尝试了您的解决方案,我得到了00:00:00作为两者的回报,这是否意味着它们的速度一样快?我甚至在for循环中把它们增加到5000个,运行时根本不需要任何时间。好的,我只是将循环增加到500000个,第一个循环得到00:00:21,第二个循环得到00:00:00。