Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 属性Get-v方法的性能_C#_Oop - Fatal编程技术网

C# 属性Get-v方法的性能

C# 属性Get-v方法的性能,c#,oop,C#,Oop,我在中有一个包含方法集合的类,我想知道在属性之上使用方法是否有任何性能提升 有些方法相当复杂,但基本上返回对象的IEnumerable集合,而另一些方法则是简单的返回值。其中(x=>x.property==“comparison”)Linq查询 示例 方法: public IEnumerable<PenDataRow> ActivePens() => Pens.Where(x => x.Status == "Active"); public IEnumerable Ac

我在中有一个包含方法集合的类,我想知道在属性之上使用方法是否有任何性能提升

有些方法相当复杂,但基本上返回对象的IEnumerable集合,而另一些方法则是简单的
返回值。其中(x=>x.property==“comparison”)
Linq查询

示例

方法:

public IEnumerable<PenDataRow> ActivePens() => Pens.Where(x => x.Status == "Active");
public IEnumerable ActivePens()=>Pens.Where(x=>x.Status==“Active”);
财产:

public IEnumerable<PenDataRow> ActivePens => Pens.Where(x => x.Status == "Active");
public IEnumerable ActivePens=>Pens.Where(x=>x.Status==“Active”);

将它们标记为属性或方法更好吗?

属性是作为隐藏的方法实现的,因此绝对没有性能差异。属性是语义的。

不,没有任何性能提升,因为它们也是帮助以更优雅的方式公开私有字段的方法。

属性只是一个或两个具有特定命名和元数据的方法


因此,开销是一样的,JIT内联的机会也是一样的。

本质上没有性能差异,但我认为您的类的用户可能“期望”一个。也就是说,像
ActivePens
这样的属性可能被认为比像
GetActivePens()
这样的方法“更轻”。我尝试编写方法来获取更昂贵的东西的值。这很主观


也可能存在调试器影响-将鼠标悬停在调试器中某个类的某个属性上可能会调用该属性,并导致执行代价高昂的操作以显示工具提示。

关于调试器影响,这肯定是正确的。当您将鼠标悬停在属性上时,调试器将尝试计算属性,默认情况下,调试器不会尝试调用方法。这可能有起有落(如果它是一种方法,则更难检查,但也不会导致意外的副作用)。因此,我遇到的最糟糕的问题是由一个单例实例引起的,其中实例化单例会导致副作用。如果在实例化过程中遇到断点并将鼠标悬停在Instance属性上,则可能会触发尝试重新实例化,导致非常奇怪的结果。也就是说,默认情况下它不会枚举,因此此特定情况不会在调试器中造成任何意外的开销。