MSDN.WhiteKnight - Stack Overflow answers
Ответ на "Зависит ли время на создание объекта от количества его свойств и методов?"
Answer 645356
Исследования показали, что время выполнения конструктора зависит от количества памяти, выделяемой под экземпляр класса. Соответственно, поля и свойства с неявными 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
Content is retrieved from StackExchange API.
Auto-generated by ruso-archive tools.