У меня есть следующий метод
void DoSome(){
if (int.Parse(SomeStringProperty) > 8)
// do something
if (int.Parse(SomeStringProperty) < 10)
// do something
}
Знает ли JIT, что нужно сохранить проанализированное значение, или лучше сделать следующее:
void DoSome(){
var x = int.Parse(SomeStringProperty);
if (x > 8)
// do something
if (x < 10)
// do something
}
Здесь я вижу две оптимизации:
- JIT автоматически сделает что-то вроде второго примера.
- JIT выполняет одну оптимизацию и кэширует результат
Мой вопрос касается только одной оптимизации, которая должна быть последовательной, а не двух оптимизаций, которые могут зависеть от множества факторов.
Короче говоря, когда я пишу приложение на С#, какой из приведенных выше примеров предпочтительнее?
Обновить
Если ответа нет, то почему он отличается от этого:
foreach (var x in MyMethod.GetEnumeration())
здесь не нужно делать:
var lst = MyMethod.GetEnumeration();
foreach (var x in lst)
int.Parse
даже не является чистым в самом строгом смысле, поскольку он обращается к глобальному изменяемому состоянию, связанному с текущей культурой. - person CodesInChaos   schedule 02.12.2013var x = int.Parse(SomeStringProperty);
. Исправьте и используйте эту опцию - вы никогда не можете быть уверены с JIT (это зависит от платформы и фазы Луны) - person Sergey Berezovskiy   schedule 02.12.2013