Записи с меткой "рабочее"
iPad
perfomance
Будете смеяться, но после того, как я оптимизировал создание карты с 10 секунд до 23 миллисекунд, мы упёрлись в производительность стандартных коллекций.
Раньше, когда небо было голубое и трава зелёная, монстров у нас было чётко заданное количество. Поэтому был массив. Сейчас, количество мобов меняется, поэтому, недолго думая, был всунут List<T>. Всё бы ничего, но сервер тут же стал жрать в 4 раза больше проца. Замеры показали, что почти вся нагрузка – пересчёт монстров, из которого половину времени мы сидим в геттера List<T>.Item.
Думаем, что делать
Грабли, как мне кажется, есть везде. В своё время, ни одна библиотека не прошла мимо меня в проект, кроме, пожалуй, Infragistics, без доработки. Поговорим о граблях в System.AddIn.
Для начала порекомендую прочитать статью в блоге Джейсона Хи (Jason He), которая называется «Coding patterns to avoid in addin pipeline development». Да и вообще, его блог почитать надо, он поподробнее Walkthrough в MSDN.
Итак, первая грабля, на которую я наступил: дефолтные домены работают без ShadowCopy, как следствие, заменить сборки на горячем сервере мы не можем. Ок, нам особо и не надо, сделаем домен сами:
Collection tokens = AddInStore.FindAddIns(typeof(IView), pipelineRootFolderPath);
AddInToken calcToken = tokens[0];
AppDomain domain = AppDomain.CreateDomain(string.Format("Test {0}", DateTime.Now), null, new AppDomainSetup { ShadowCopyFiles = "true" });
return calcToken.Activate(domain);
Затем мы работаем, всё ок. Для выгрузки аддона используем такой код: AddInController.GetAddInController(calc).Shutdown(). По идее всё хорошо, но есть одно но. Из-за того, что мы домен создали вручную, то автоматически инфраструктура System.AddIn его не выгрузит. Да, это может быть логично, но об этом нигде не написано.
Код ниже логичен, но будет падать, несмотря на то, что ссылка на домен у контроллера есть, и она живая. Просто разработчики посчитали, что раз AddIn отключен, то домен нам уже не нужен. Вообще, реализация AddInController’a с lock(this) и прочим меня ни разу не порадовала.
c.Shutdown();
AppDomain.Unload(c.AppDomain);
Правильный код вот такой:
AppDomain d = c.AppDomain;
c.Shutdown();
AppDomain.Unload(d);
Кризис
System.AddIn
Спасибо коллегам, отговорившим меня городить велосипед. Но монструозность System.Addin таки поражает.
Кто мне скажет, зачем выделили Views? Я вот что-то понять не могу, хватило бы адаптеров, имхо.
Минимальный проект с использованием System.AddIn
Метки:.net, программирование, рабочееSystem.Addin
Кто будет использовать, учтите, что при отключении Addin’а последовательно вызываются
GC.Collect();
Из-за этого придётся городить свой движок плагинов.
Метки:программирование, рабочее.net программист
Ищется .Net программист, Москва, зп, как обычно по результатам собеседования.
Резюме и вопросы мне в почту (либо anatoly.popov at gmail.com, либо popov at fragoria.ru).
Требования просты. Быть по скиллу не ниже меня. Офис пока на м.Авиамоторная, если это имеет значение. 10 минут пешком от метро, собсно.
Метки:дневник, рабочеео игроках
Итак, краткое пособие, как достать разрабов игры, в которую играем.
Начинаем писать на форуме «Ааааа, у меня каждый рестарт уменьшается ДПС!!!!111111″. Финансистов такие темы бесят и они имеют мозг техлиду, техлида бесит, когда ему имеют моск, в общем, дальше всё спускается до рядовых разрабов (меня). Я сутки трачу на то, чтобы найти баг, баг не нахожу, рапортую – игрок-пиздобол и вертаю баг.
Игрок утверждает, что он не пиздобол, что все девы – пидарасы, баг спускается уже на ведущего разраба, у которого итак есть чем заняться, он два дня тратит на поиск бага, бага не находит. Просит дать скриншот игрока. Игрок даёт, закрывая формой перса строчку с иконками баффов. Прогеру не западло посчитать ручками (он же не школота из опроса на форуме), а насколько же упал урон? Выясняется, что упал он ровно настолько, сколько даёт бутылка эликсира ловкости, которую игрок выпил перед рестартом сервера.
Вот и помогай игрокам после этого. Конечно, не все они такие, наверно. Но факт остаётся фактом. И таких случаев масса.
Мне непонятна психология таких поступков? Ну вот нахера? На что человек надеется? Что ему что-то проапают нахаляву? Или где?
Метки:дневник, рабочееозу
Тестовый сервер жрёт теперь 600 метров памяти вместо полутора гигов. Мелочи, а приятно.
Метки:дневник, программирование, рабочее