
Nikita
02.03.2017
14:36:14
30 таблиц для всего-всего прилагается

Roman
02.03.2017
14:48:40

tm
02.03.2017
14:51:28
Просто был рефакторинг ради рефакторинга и красивой архитектуры
Для себя вывел положение ползунка "быстро - круто"
Должны выполняться условия:
- Понятно команде
- Тестируемо
- Расширяемо/изменяемо для обозримых (подчёркнуто) задач
- Просто (на сколько это возможно)
- Выполняет все бизнесс требования текущего момента. Предполагает расширение в сторону "идей" бизнесса
Если оптимизировать именно эту функцию (как сумму квадратов этих показателей ;) То становится понятна грань перфекционизма и напротив, спагетти

Arseniy
02.03.2017
14:52:35
это тоже самое, что и срач выше. за всё хорошее против всего плохого)

Google

tm
02.03.2017
14:52:46
Типа, замутил всё по бест практикам - и простота ушла, команда боится твоей иерархии в 100500 классов.
Написал лапшу - и никто не рискнёт брать за это ответственность

Женя
02.03.2017
14:52:50

tm
02.03.2017
14:53:23

Axm
02.03.2017
14:53:25

Женя
02.03.2017
14:54:31

Vasily
02.03.2017
14:54:32
:)

Axm
02.03.2017
14:54:46

Andrew
02.03.2017
14:55:15

Nikita
02.03.2017
14:55:33
и подводных камней ещё на 10

Axm
02.03.2017
14:55:36
ты лучше конкретный вопрос по событиям спроси

Женя
02.03.2017
14:55:41
ну если шарпы не знаешь, то все равно непонятно

Axm
02.03.2017
14:55:47

Andrew
02.03.2017
14:56:00

Google

Andrew
02.03.2017
14:57:13
замуты с трэдсэйф?
так они ни разу вообще)

Axm
02.03.2017
14:59:26

Andrew
02.03.2017
14:59:53
еее я победииил)

Nikita
02.03.2017
15:00:13
через которых это всё счастье и работает

Andrew
02.03.2017
15:01:41
потому я и предлагал без них) лучший тредсейф - отсутствие разделенных ресурсов

Nikolay
02.03.2017
16:23:37
А кто-нибудь знает, будет ли разница в скорости?
for (var i = 0; i < items.Count; i++)
{
var item = items[i];
item.a = item.b == 0 ? 1 : -1;
}
vs
for (var i = 0; i < items.Count; i++)
{
items[i].a = items[i].b == 0 ? 1 : -1;
}

Vladimir
02.03.2017
16:24:32
микросекунды экономишь?

Сергей
02.03.2017
16:25:01
Даже не микро

Nikolay
02.03.2017
16:25:10
Такты экономлю

Nikita
02.03.2017
16:25:31
в дизасм тогда смотри
а не в чатах спрашивай

Vladimir
02.03.2017
16:25:48
тогда сомневаюсь что поможет, скорее всего это компильнётся в одинаковый байткод )

Nikolay
02.03.2017
16:25:57
Чего вы такие злые? =/

Nikita
02.03.2017
16:26:46
https://tryroslyn.azurewebsites.net
на тебе смотрелку байткода

Nikolay
02.03.2017
16:28:51
Эммм, странно он декомпилит
for (int i = 0; i < list.Count; i++;)
{
List<int> list2 = list;
int index = i;
list2[index] += i;
}

Google

Andrew
02.03.2017
16:33:53

Nikita
02.03.2017
16:36:25

Сергей
02.03.2017
16:45:57
Ну так что быстрее то в итоге?

Arseniy
02.03.2017
16:46:43
ничего. одинаковый байткод

Сергей
02.03.2017
16:47:24
хм
Method | Mean | StdDev |
------- |----------- |---------- |
M1 | 43.4137 ms | 0.8378 ms |
M2 | 54.1383 ms | 1.1063 ms |

Nikita
02.03.2017
16:47:41
а ты точно правильно делаешь бенчмарк?

Pichugin
02.03.2017
16:47:49
Мерелку от Акиньшина запустите.

Сергей
02.03.2017
16:47:57
Нет конечно, я же не Акиньшин

Pichugin
02.03.2017
16:48:58
https://github.com/dotnet/BenchmarkDotNet
Но думаю разницы не должно быть.
Разница в одной операции - скопировать ссылку на объект в переменную метода.
Котрую отпимизатор как раз может быть и убрал бы, если бы там что-нибудь.. короче зависит от кучи всего.

Roman
02.03.2017
16:56:21
https://t.me/vr_developers
Всем привет!
Объединяем VR разработчиков

Arseniy
02.03.2017
16:59:06

Сергей
02.03.2017
17:11:18
Method | Mean | StdErr | StdDev |
------- |----------- |---------- |---------- |
M1 | 35.2904 ms | 0.2382 ms | 0.9226 ms |
M2 | 36.2811 ms | 0.3536 ms | 1.3695 ms |
M3 | 16.0743 ms | 0.0648 ms | 0.2509 ms |
M4 | 19.9209 ms | 0.3047 ms | 1.3962 ms |

Nikita
02.03.2017
17:11:50
Ты бы это
на свежих коллекциях делал

Pichugin
02.03.2017
17:12:09
Этап
1) Генерация MSIL (компилятор)
2) Генерация ASM (jit)

Nikolay
02.03.2017
17:12:48
Короче, сделал несколько разных тестов

Сергей
02.03.2017
17:12:55

Nikolay
02.03.2017
17:13:07
Вариант с созданием новой переменной всегда был быстрее

Google

Nikita
02.03.2017
17:13:13
ну у тебя уже всякие кеши и предсказамусы переходов прогрелись

Сергей
02.03.2017
17:13:59
Ну т.е если я поменяю порядок бенчмарков то будет разница?

Nikolay
02.03.2017
17:15:56
Что-то не пойму прикол

Admin
ERROR: S client not available

Nikolay
02.03.2017
17:16:15
ref var item = ref _items2[i];
Это чё такое?

Nikita
02.03.2017
17:16:25
код

Nikolay
02.03.2017
17:17:03
Почему у меня такой хак не работает?

Nikita
02.03.2017
17:17:56
пушто это не хак

Pichugin
02.03.2017
17:18:03
смотрится странно :)
он берет исходную ссылку, не создавая копию.
но ведь массив и так ее хранит, если занулить что будет?
0x111, null, 0x222 ?

Nikolay
02.03.2017
17:19:30
Что я делаю не так?

Сергей
02.03.2017
17:19:30
В общем если изменить порядок то разницы нет, но нюансах я не шарю

Nikolay
02.03.2017
17:19:37

Сергей
02.03.2017
17:19:43

Nikolay
02.03.2017
17:19:52
Ммм
Круто
У меня инициализация массива так сделана:
var items = new List<Test?);
for (var i = 0; i < 10000000; i++)
{
items.Add(new Test
{
A = rnd.Next(0, 1000),
B = rnd.Next(0, 1)
});
}
Так что никаких хитроумных кэшей быть не должно
Короче, получается так:
Если один раз обращаешься к элементу массива, быстрее будет без создания переменной
Если более одного раза обращаешься к элементу массива, быстрее будет с созданием переменной

Google

Сергей
02.03.2017
17:27:28

Nikolay
02.03.2017
17:27:52
Мерял стопвотчем
Делал несколько тестов на одной большой выборке
Выборка была одинаковой
Каждый тест запускался отдельной программой в Release конфигурации

Сергей
02.03.2017
17:29:17
Ерунда это все
Я про такие бенчмарки и выводы из них

Nikolay
02.03.2017
17:29:47
Сделай свой бенчмарк, если это ерунда

Сергей
02.03.2017
17:30:24
Никто кроме Акиньшена не сделает...

Nikita
02.03.2017
17:31:32
джон скит сделает

Nikolay
02.03.2017
17:33:40
Ну я никому своё мнение не навязываю, меня такой тест вполне устраивает, и результат теста в целом логичен

Sergey
02.03.2017
17:41:19
Коллеги
Если я клас делаю сериазебл
Класс
Эта группа больше не существует