Страницы

Поиск по вопросам

понедельник, 8 апреля 2019 г.

Зависит ли время на создание объекта от количества его свойств и методов?

Есть 2 класса:
public class MyClass { public int Prop { get; set; } }
public class MyClass2 { public int Prop1 { get; set; } public int Prop2 { get; set; } public int Prop3 { get; set; } public int Prop4 { get; set; } public int Prop5 { get; set; } }
Конструкторы этих классов отработают за одинаковое количество времени или нет?


Ответ

Исследования показали, что время выполнения конструктора зависит от количества памяти, выделяемой под экземпляр класса. Соответственно, поля и свойства с неявными get/set (как у вас) влияют, а методы и свойства с явными get/set не влияют (память под них в экземпляре не выделяется).
using System; using System.Collections.Generic; using System.Diagnostics;
namespace ConsoleTest {
public class LittleClass { public int Prop0 { get; set; } }
public class BigClass { public int Prop1 { get; set; } public int Prop2 { get; set; } public int Prop3 { get; set; } public int Prop4 { get; set; } public int Prop5 { get; set; } }

class Program { const int N = 100000000;
static void Main(string[] args) { Stopwatch s; int i;
LittleClass lc = new LittleClass(); BigClass bc = new BigClass();
/* ------------------------------------------------------------------*/ s = new Stopwatch(); Console.WriteLine("BigClass test..."); s.Start(); for (i = 0; i < N; i++) { bc = new BigClass(); } s.Stop(); Console.WriteLine("t=" + s.ElapsedMilliseconds.ToString()); /* ------------------------------------------------------------------*/ s = new Stopwatch(); Console.WriteLine("LittleClass test..."); s.Start(); for (i = 0; i < N; i++) { lc = new LittleClass(); } s.Stop(); Console.WriteLine("t=" + s.ElapsedMilliseconds.ToString()); /* ------------------------------------------------------------------*/ Console.ReadKey(); } }
}
Результат (оптимизация включена)

По моим расчетам, время инициализации класса описывается формулой
t=(2,6*s+43,8)/(10^7) мс
где s - суммарный размер типов всех членов, под которые память выделяется (см.выше),
с коэффициентом корелляции 0,99.
Наличие постоянной составляющей, я полагаю, объясняется наличие служебной информации, под которую выделяется, предположительно, 16 байт.

Исследование проводилось на машине с процессором с тактовой частотой 2.33 ГГц. Для вычисления времени, не зависимого от машины, надо эту формулу умножить на тактовую частоту, получая время в "тактах процессора":
t = 0,6*s+10,9

Комментариев нет:

Отправить комментарий