Вне всякого сомнения, Кирилл. Это исключительно POC для сравнения базовой функциональности. Если говорить об инициализации экземпляров, у которого отсутствует конструктор по умолчанию, то тогда это или дополнительные конфигурации или Resolve.
Говоря про latency я подразумеваю издержки на соединение посредством сети. Выше уже упоминал, что в том случае когда соединение осуществляется посредством мобильного интернета- гонять туда/сюда данные из-за нежелания реализовать валидацию на frontend, на мой взгляд, является признаком плохого тона (как с точки зрения заботы о трафике пользователя, так и времени ответа).
Добавлю так же, что в случае с валидацией на frontend уменьшается latency и используются ресурсы клиента. Принимая во внимание, что скорость соединения так же может являться bottleneck (возьмём удалённые host'ы или 3G соединения), считаю, что валидация на клиенте это признак хорошего и зрелого приложения, нежели ненужная прихоть.
Валидация на backend не отменяет необходимость валидации данных на froentend если вам дороги серверные ресурсы. И не важно, SPA это или не SPA. Чем раньше пользователь обнаружит ошибку, тем более user-friendly окажется форма (не забываем так же и про принцип fail fast).
Если я не ошибаюсь, в LightInject функция activator'a (или даже весь Resolve) собирается посредством emit'a IL инструкций. На мой взгляд, это первостепенная причина такого разрыва.
1. Замена ConcurrentDictionary на обычный Dictionary привнесла порядка 5% ускорения;
2. Возможно, но в данном случае роли не играет, т.к. объекты не IDisposable;
Долгое время для меня всё, что происходит внутри контейнеров оставалось загадкой, поэтому решил разобраться с этим попытавшись написать своё собственное решение. Это побудило меня к длительному изучению внутреннего устройства существующих контейнеров (Unity, Ninject, StructureMap) и развеяло всё мистическое :)
1. Правильно ли я понимаю, что в файле реплея содержатся ничто иное, как последовательность действий каждого из игроков, которые передаются интерпретатору (движку игры) как если бы игра происходила в real-time?
2. Итоговая статистика (сколько каждый из игроков добыл, произвёл, убил) «аккумулятивна»? Другими словами, вычисляется в процессе воспроизведения записи или же хранится в виде «summary» файле?
int, внезапно, это тоже struct. Смысл тестировать с еще одной структурой?
Это действительно оказалось внезапным, однако хоть int и является структурой, он не является user defined struct.
Я не DreamWalker, но вот http://benchmarkdotnet.org/RulesOfBenchmarking.htm
Все эти рекомендации были учтены в момент измерения.
Меня интересует скорее проблема того, что в методах присутствует начальная инициализация, которую я старался нивелировать за счёт большего кол-ва прогонов внутри метода. Связано это с тем, что библиотека не позволяет использовать в benchmark'ах методы, которые имеют аргументы (а следовательно, начальную инициализацию value type'ов, к примеру, вынести не получается).
Всё верно. Проверить утверждение самому и предложить поделиться своими результатами читателей для оценки различий в зависимости от окружения, на котором данные benchmark'и запускаются.
Я мог неправильно вас понять, но мне сложно представить почему вы считаете что память под стек уже выделена, а в куче нет. Аналогично стеку память выделяется и под процесс на момент инициализации GC и запуска процесса.
В таком случае обе эти операции лишь копируют свои значения, т.к. память под их нужды была выделена заранее.
Resolve
.Источник перевода: hackernoon.com/twelve-fancy-chrome-devtools-tips-dc1e39d10d9d
2. Возможно, но в данном случае роли не играет, т.к. объекты не IDisposable;
Подскажите, стоит ли и если да, то когда можно ожидать видео докладов?
Если позволите, вопрос по внутренности реплеев:
1. Правильно ли я понимаю, что в файле реплея содержатся ничто иное, как последовательность действий каждого из игроков, которые передаются интерпретатору (движку игры) как если бы игра происходила в real-time?
2. Итоговая статистика (сколько каждый из игроков добыл, произвёл, убил) «аккумулятивна»? Другими словами, вычисляется в процессе воспроизведения записи или же хранится в виде «summary» файле?
Это действительно оказалось внезапным, однако хоть int и является структурой, он не является user defined struct.
Все эти рекомендации были учтены в момент измерения.
Меня интересует скорее проблема того, что в методах присутствует начальная инициализация, которую я старался нивелировать за счёт большего кол-ва прогонов внутри метода. Связано это с тем, что библиотека не позволяет использовать в benchmark'ах методы, которые имеют аргументы (а следовательно, начальную инициализацию value type'ов, к примеру, вынести не получается).
В таком случае обе эти операции лишь копируют свои значения, т.к. память под их нужды была выделена заранее.