Bat*_*rog 2 c# linq performance
我在MVC应用程序中使用LINQ.我注意到我可以通过两种方式创建一种方法,两种方法都有效,但我不知道哪种方法最好.
直接:
public string GetStatus(int PersonId)
{
return db.PersonStatus
.Where(x => x.personid == PersonId)
.Select(x => x.Status)
.Single();
}
Run Code Online (Sandbox Code Playgroud)
在var中首先:
public string GetStatus(int PersonId)
{
string Item = db.PersonStatus
.Where(x => x.personid == PersonId)
.Select(x => x.Status)
.Single();
return Item;
}
Run Code Online (Sandbox Code Playgroud)
我更喜欢第一种直接方法,因为它似乎更有效.如果两者之间存在显着差异,请告诉我,如果是,那么什么?
据我所知,两者之间没有实际差别(第二个可能会优化到第一个).使用LINQ和常规函数执行此操作也没有区别.
但是,第二个将更容易调试,因为您在评估之后将结果放在某处,因此您可以放入断点并检查该变量.不过,我发现第一个略显清晰.
这有两个功能:
int Foo(int a, int b)
{
int x = a+b;
return x;
}
int Bar(int a, int b)
{
return a+b;
}
Run Code Online (Sandbox Code Playgroud)
这是通过优化生成的IL(根据LINQPad):
Foo:
IL_0000: nop
IL_0001: ldarg.1
IL_0002: ldarg.2
IL_0003: add
IL_0004: stloc.0 // x
IL_0005: ldloc.0 // x
IL_0006: stloc.1 // CS$1$0000
IL_0007: br.s IL_0009
IL_0009: ldloc.1 // CS$1$0000
IL_000A: ret
Bar:
IL_0000: nop
IL_0001: ldarg.1
IL_0002: ldarg.2
IL_0003: add
IL_0004: stloc.0 // CS$1$0000
IL_0005: br.s IL_0007
IL_0007: ldloc.0 // CS$1$0000
IL_0008: ret
Run Code Online (Sandbox Code Playgroud)
您会注意到它Foo有两个额外的行,它声明变量然后读取它.
在这里优化:
Foo:
IL_0000: ldarg.1
IL_0001: ldarg.2
IL_0002: add
IL_0003: stloc.0 // x
IL_0004: ldloc.0 // x
IL_0005: ret
Bar:
IL_0000: ldarg.1
IL_0001: ldarg.2
IL_0002: add
IL_0003: ret
Run Code Online (Sandbox Code Playgroud)
再次,一个额外的任务和负载.你永远不会注意到差异.
| 归档时间: |
|
| 查看次数: |
68 次 |
| 最近记录: |