Стоимость небольших вызовов методов в C # и оптимизации - PullRequest
2 голосов
/ 13 апреля 2011

Мне было интересно, каковы издержки вызова коротких методов или будет ли код оптимизирован в любом случае, и если он будет отличаться от стоимости геттеров?

Я просто приведу пример, потому что это трудно объяснить.

У меня есть 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);
    }
}
*/

Так это плохая практика иметь эти короткие методы get? Должны ли быть большие накладные расходы на вызовы, потому что они настолько короткие, или это будет оптимизировано? Наконец, имеет ли смысл использовать здесь геттеры? ..

Спасибо

Ответы [ 3 ]

5 голосов
/ 13 апреля 2011

По моему мнению, все возможные незначительные накладные расходы, связанные с использованием сеттеров и геттеров, перевешиваются чистым и более легко обслуживаемым кодом, который, скорее всего, любому разработчику .NET с улицы будет проще взять и запустить.

Но я думаю, это также зависит от того, насколько велик ваш объект претензии. :)

2 голосов
/ 13 апреля 2011

По производительности нет разницы между геттером и методом.Получатель - это всего лишь синтаксический сахар, который преобразуется в метод во время компиляции.Есть некоторые общие рекомендации относительно того, когда использовать метод получения и когда использовать метод. На этой странице MSDN рекомендуется использовать метод вместо свойства, если:

  • Операция является преобразованием, например Object.ToString.
  • Операциядостаточно дорого, чтобы вы хотели сообщить пользователю, что он должен рассмотреть возможность кэширования результата.
  • Получение значения свойства с использованием метода доступа get будет иметь видимый побочный эффект.
  • Вызов члена дважды внаследование дает разные результаты.
  • Порядок исполнения важен.Обратите внимание, что свойства типа могут быть установлены и извлечены в любом порядке.
  • Элемент является статическим, но возвращает значение, которое можно изменить.
  • Элемент возвращает массив.Свойства, которые возвращают массивы, могут вводить в заблуждение.Обычно необходимо вернуть копию внутреннего массива, чтобы пользователь не мог изменить внутреннее состояние.Это в сочетании с тем, что пользователь может легко предположить, что это индексированное свойство, приводит к неэффективному коду.
0 голосов
/ 13 апреля 2011

Я бы не использовал для этого геттер, свойства должны возвращать значение константа . Это означает, что эти последовательные вызовы должны возвращать одно и то же значение. Это просто концептуальная вещь.

...