Оптимизация метода получения свойств для ValueTypeC#

Место общения программистов C#
Ответить
Anonymous
 Оптимизация метода получения свойств для ValueType

Сообщение Anonymous »

У меня есть такая иерархическая структура классов

Код: Выделить всё

public class Class1
{
internal DateTime time = DateTime.Now;
}

public class Class2
{
internal Class1 C1;

public Class2(Class1 c1) { C1 = c1; }

public DateTime Time { get { return C1.time; } }
}

public class Class3
{
internal Class2 C2;

public Class3(Class2 c2) { C2 = c2; }

public DateTime Time { get { return C2.Time; } }
}

public class Class4
{
internal Class3 C3;

public Class4(Class3 c3) { C3 = c3; }

public DateTime Time { get { return C3.Time; } }
}
Интересно, когда я позвоню

Код: Выделить всё

Class4 C4 = new Class4(.....);
Console.WriteLine(C4.Time);
будут ли данные ValueType (в данном случае это DateTime) копироваться 4 раза или JIT-компилятор оптимизирует код и перегенерирует его как встроенную версию, например C4.C3. C2.C1.time;

Компилятор C# не выполняет никакой оптимизации. Код, сгенерированный ILDASM, находится здесь:

Код: Выделить всё

// get { return C3.Time; }
.method public hidebysig specialname instance valuetype [mscorlib]System.DateTime
get_Time() cil managed
{
// Code size       12 (0xc)
.maxstack  8
IL_0000:  ldarg.0
IL_0001:  ldfld      class CSTester.Class3 CSTester.Class4::C3
IL_0006:  callvirt   instance valuetype [mscorlib]System.DateTime CSTester.Class3::get_Time()
IL_000b:  ret
} // end of method Class4::get_Time

// get { return C2.Time; }
.method public hidebysig specialname instance valuetype [mscorlib]System.DateTime
get_Time() cil managed
{
// Code size       12 (0xc)
.maxstack  8
IL_0000:  ldarg.0
IL_0001:  ldfld      class CSTester.Class2 CSTester.Class3::C2
IL_0006:  callvirt   instance valuetype [mscorlib]System.DateTime CSTester.Class2::get_Time()
IL_000b:  ret
} // end of method Class3::get_Time
РЕДАКТИРОВАНИЕ: код компилируется в режиме выпуска с включенной оптимизацией.

Подробнее здесь: https://stackoverflow.com/questions/652 ... -valuetype
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»