问题描述
|
我想知道调用短方法的开销是多少,或者代码是否可以通过任一方式进行优化以及它是否与获取方法的成本不同?
我只举一个例子,因为很难解释。
我有一个网站的ClaimsManager,该网站可以获取特定的声明并返回它们。从另一个索取一个索偿的过程仅在ClaimsType字符串上有所不同。
public string GetClaimValueByType(string ClaimType)
{
return (from claim in _claimsIdentity.Claims
where claim.ClaimType == ClaimType
select claim.Value).SingleOrDefault();
}
/*Again would this be better or worse if I wanted to be able to choose if
I want the claim versus the value?
public Claim GetClaimByType(string ClaimType)
{
return (from claim in _claimsIdentity.Claims
where claim.ClaimType == ClaimType
select claim).SingleOrDefault();
}
public string GetClaimValueByType(string ClaimType)
{
return GetClaimByType(ClaimType).Value;
}
*/
public string GetEmail()
{
return GetClaimValueByType(ClaimTypes.Email);
}
/* Or should I use getters?...
public string Email
{
get
{
return return GetClaimValueByType(ClaimTypes.Email);
}
}
*/
那么拥有这些短时间获取方法是一种不好的做法吗?是否应该因为它太短而产生较大的呼叫开销,还是会对其进行优化?最后,在这里实际使用吸气剂是否更有意义?
谢谢
解决方法
我认为,使用setter和getter可能产生的边际开销远远超过了干净且更易于维护的代码,这对任何外出的.NET开发人员来说都更容易上手。
但是我想这还取决于您的Claim对象的大小。 :)
,在性能方面,吸气剂和方法之间没有区别。吸气剂只是语法糖,在编译过程中会转换为方法。关于何时使用吸气剂和何时使用方法有一些通用准则。此msdn页建议在以下情况下使用方法而不是属性:
该操作是一个转换,例如Object.ToString。
该操作非常昂贵,以至于您希望与用户进行交流,以使他们应考虑将结果缓存。
使用get访问器获取属性值将产生明显的副作用。
连续两次呼叫成员会产生不同的结果。
执行顺序很重要。请注意,应该能够以任何顺序设置和检索类型的属性。
该成员是静态的,但返回可以更改的值。
成员返回一个数组。返回数组的属性可能会引起误解。通常,必须返回内部阵列的副本,以便用户无法更改内部状态。加上用户可以轻松地认为它是索引属性的事实,导致代码效率低下。
,我不会为此使用吸气剂,属性旨在返回恒定值。这意味着顺序调用应返回相同的值。这只是一个概念上的事情。