Здравствуйте, vdimas, Вы писали:
V>Здравствуйте, Ikemefula, Вы писали:
V>>>>>Гы-гы, оценка O — это оценка сложности СВЕРХУ. А на реальных задачах обязательно интересует так же оценка СНИЗУ.
I>>>>Давай, покажи на примере Enumerable.ElementAt, вперёд.
V>>>Что тебе показать-то? Принцип подвижного маляра относительно неподвижного ведра с краской? ))
I>>"прирост до 50 раз " @ vdimas
V>Этот множитель сложился из двух множимых. См. исходный пост на русском языке: http://www.rsdn.ru/forum/philosophy/4843592.1.aspxАвтор: vdimas
Дата: 05.08.12
.
То есть, ты разницу между IList и List помножил на разницу между ручной и встроеной серилизацией ?
Но по любому , ты снова ошибся хотя уже не на порядок
Проверяем "разница м/у использованием List<> и IList<> в коде от 3-х до ~10-ти раз (от стоимости тела цикла зависит)"
Итерации по контейнерам длиной N, где в цикле выполняется единственная строчка в виде обращения к элементу для того что бы все итерации были в равных условиях, элементов 10КК, 10 прогонов + вычисление среднего.
Для сравнения приведены результаты по ArrayList и LinkedList и Array
цикл контейнер время_относительно_первой_строчки
foreach object[] 1
for object[] 1
foreach IList<object> 3.5
for IList<object> 4
for List<object> 1.7
foreach List<object> 2
ForEach List<object> 1.7
foreach ArrayList 6
for ArrayList 3
foreach LinkedList<object> 4
Итого, максимальная разница между List и IList в 2.5 раза. С valuetype вместо object разница еще меньше, всего 1.5 раза.
Вероятно "от 3-х до ~10-ти" ты получил вообще на пустых итерациях
V>А теперь тебе надо бъяснить пассаж насчет Enumerable.ElementAt.
Объясняю — использование List может быть очень дорогим удовольствием, а хочется, что бы некоторые функции вроде Linq2Objects работали крайне быстро, выход — IList<>
I>>Успокойся, не волнуйся, твои сценарии самые-самые, и да, это не беда, что только у тебя они используются.
I>>Для моих сценариев IList<> в самый раз, просто потому что List<> это ОЧЕНЬ дорогой контейнер. Настолько дорогой, что использовать его нельзя во многих сценариях.
V>Дык, никто не мешает использовать любые конкретные типы, в т.ч. обычный массив. И таки, если речь об итерировании, то итерирование по List<> нифига не дорогое удовольствие, в отличие от IList<>.
Ты похоже не понимаешь — если List это очень дорого, то и массив тоже будет так же дорого.
Реальная разница в 2.5 раза на почти пустой итерации. Если цикл чуть сложнее суммы элементов, эта разница становится ничтожной.