Записи с меткой "рабочее"

28
Дек

38 hours

   Автор: Aen Sidhe    в дневник

Побьём рекорд или нет?

16
Дек

perfomance

   Автор: Aen Sidhe    в программирование

Будете смеяться, но после того, как я оптимизировал создание карты с 10 секунд до 23 миллисекунд, мы упёрлись в производительность стандартных коллекций.

Раньше, когда небо было голубое и трава зелёная, монстров у нас было чётко заданное количество. Поэтому был массив. Сейчас, количество мобов меняется, поэтому, недолго думая, был всунут List<T>. Всё бы ничего, но сервер тут же стал жрать в 4 раза больше проца. Замеры показали, что почти вся нагрузка — пересчёт монстров, из которого половину времени мы сидим в геттера List<T>.Item.

Думаем, что делать :)

Грабли, как мне кажется, есть везде. В своё время, ни одна библиотека не прошла мимо меня в проект, кроме, пожалуй, Infragistics, без доработки. Поговорим о граблях в System.AddIn.

Для начала порекомендую прочитать статью в блоге Джейсона Хи (Jason He), которая называется «Coding patterns to avoid in addin pipeline development». Да и вообще, его блог почитать надо, он поподробнее Walkthrough в MSDN.

Итак, первая грабля, на которую я наступил: дефолтные домены работают без ShadowCopy, как следствие, заменить сборки на горячем сервере мы не можем. Ок, нам особо и не надо, сделаем домен сами:

[cc lang=»csharp»]
AddInStore.Update(pipelineRootFolderPath);

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);
[/cc]

Затем мы работаем, всё ок. Для выгрузки аддона используем такой код: [cci lang=»csharp»]AddInController.GetAddInController(calc).Shutdown()[/cci]. По идее всё хорошо, но есть одно но. Из-за того, что мы домен создали вручную, то автоматически инфраструктура System.AddIn его не выгрузит. Да, это может быть логично, но об этом нигде не написано.

Код ниже логичен, но будет падать, несмотря на то, что ссылка на домен у контроллера есть, и она живая. Просто разработчики посчитали, что раз AddIn отключен, то домен нам уже не нужен. Вообще, реализация AddInController’a с [cci lang=»csharp»]lock(this)[/cci] и прочим меня ни разу не порадовала.

[cc lang=»csharp»]
AddInController c = AddInController.GetAddInController(calc);
c.Shutdown();
AppDomain.Unload(c.AppDomain);
[/cc]

Правильный код вот такой:

[cc lang=»csharp»]
AddInController c = AddInController.GetAddInController(calc);
AppDomain d = c.AppDomain;
c.Shutdown();
AppDomain.Unload(d);
[/cc]

15
Ноя

Кризис

   Автор: Aen Sidhe    в дневник

А вот резюме. Я, если честно, думаю, что это шутка.

Ну или что не найдётся ни одного вменяемого работодателя, который это чудо наймёт.

9
Ноя

System.AddIn

   Автор: Aen Sidhe    в программирование

Спасибо коллегам, отговорившим меня городить велосипед. Но монструозность System.Addin таки поражает.

Кто мне скажет, зачем выделили Views? Я вот что-то понять не могу, хватило бы адаптеров, имхо.

Минимальный проект с использованием System.AddIn

3
Ноя

System.Addin

   Автор: Aen Sidhe    в программирование

Кто будет использовать, учтите, что при отключении Addin’а последовательно вызываются

GC.WaitForPendingFinalizers();
GC.Collect();

Из-за этого придётся городить свой движок плагинов.

22
Окт

.net программист

   Автор: Aen Sidhe    в дневник

Ищется .Net программист, Москва, зп, как обычно по результатам собеседования.

Резюме и вопросы мне в почту (либо anatoly.popov at gmail.com, либо popov at fragoria.ru).

Требования просты. Быть по скиллу не ниже меня. Офис пока на м.Авиамоторная, если это имеет значение. 10 минут пешком от метро, собсно.

22
Окт

о игроках

   Автор: Aen Sidhe    в дневник

Итак, краткое пособие, как достать разрабов игры, в которую играем.

Начинаем писать на форуме «Ааааа, у меня каждый рестарт уменьшается ДПС!!!!111111». Финансистов такие темы бесят и они имеют мозг техлиду, техлида бесит, когда ему имеют моск, в общем, дальше всё спускается до рядовых разрабов (меня). Я сутки трачу на то, чтобы найти баг, баг не нахожу, рапортую — игрок-пиздобол и вертаю баг.

Игрок утверждает, что он не пиздобол, что все девы — пидарасы, баг спускается уже на ведущего разраба, у которого итак есть чем заняться, он два дня тратит на поиск бага, бага не находит. Просит дать скриншот игрока. Игрок даёт, закрывая формой перса строчку с иконками баффов. Прогеру не западло посчитать ручками (он же не школота из опроса на форуме), а насколько же упал урон? Выясняется, что упал он ровно настолько, сколько даёт бутылка эликсира ловкости, которую игрок выпил перед рестартом сервера.

Вот и помогай игрокам после этого. Конечно, не все они такие, наверно. Но факт остаётся фактом. И таких случаев масса.

Мне непонятна психология таких поступков? Ну вот нахера? На что человек надеется? Что ему что-то проапают нахаляву? Или где?

15
Окт

озу

   Автор: Aen Sidhe    в дневник, программирование

Тестовый сервер жрёт теперь 600 метров памяти вместо полутора гигов. Мелочи, а приятно.

28
Сен

рабочее

   Автор: Aen Sidhe    в дневник

Под катом картинка с диспетчера задач. Так и работаем. Памяти на машине — 2 гига.
Прочитать запись полностью »

Страница 3 из 712345...Последняя »