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。