Как стать автором
Обновить
22
0
Максим @fsou11

Full Stack Developer

Отправить сообщение
Вне всякого сомнения, Кирилл. Это исключительно 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) и развеяло всё мистическое :)
А ведь ещё data compression присутствует.
Спасибо за статью.

Подскажите, стоит ли и если да, то когда можно ожидать видео докладов?
Спасибо, сохранил
Спасибо за статью и за ваш труд, отличная работа.

Если позволите, вопрос по внутренности реплеев:

1. Правильно ли я понимаю, что в файле реплея содержатся ничто иное, как последовательность действий каждого из игроков, которые передаются интерпретатору (движку игры) как если бы игра происходила в real-time?

2. Итоговая статистика (сколько каждый из игроков добыл, произвёл, убил) «аккумулятивна»? Другими словами, вычисляется в процессе воспроизведения записи или же хранится в виде «summary» файле?

Спасибо, надо освежать знания по memory management :)
Память выделяется даже под переменные, использование которых зависит от аргументов вызова метода?

public void Execute(bool exist) {
  if(exist) {
    SmallUserStruct a = new SmallUserStruct();
  } else {
    BigUserStruct b = new BigUserStruct();
  }
}
int, внезапно, это тоже struct. Смысл тестировать с еще одной структурой?

Это действительно оказалось внезапным, однако хоть int и является структурой, он не является user defined struct.

Я не DreamWalker, но вот http://benchmarkdotnet.org/RulesOfBenchmarking.htm

Все эти рекомендации были учтены в момент измерения.

Меня интересует скорее проблема того, что в методах присутствует начальная инициализация, которую я старался нивелировать за счёт большего кол-ва прогонов внутри метода. Связано это с тем, что библиотека не позволяет использовать в benchmark'ах методы, которые имеют аргументы (а следовательно, начальную инициализацию value type'ов, к примеру, вынести не получается).
Всё верно. Проверить утверждение самому и предложить поделиться своими результатами читателей для оценки различий в зависимости от окружения, на котором данные benchmark'и запускаются.
Я мог неправильно вас понять, но мне сложно представить почему вы считаете что память под стек уже выделена, а в куче нет. Аналогично стеку память выделяется и под процесс на момент инициализации GC и запуска процесса.

В таком случае обе эти операции лишь копируют свои значения, т.к. память под их нужды была выделена заранее.

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Зарегистрирован
Активность