22
Karma
7.2
Rating
Andrey Podkolzin @podkolzzzin

Developer

.NET: Инструменты для работы с многопоточностью и асинхронностью. Часть 1

.NET: Инструменты для работы с многопоточностью и асинхронностью. Часть 1

+1
Спасибо!
Вторую часть надеюсь закончить и опубликовать в середине июня.

В поисках быстрого локального хранилища

0
Так это как раз и есть та функция, которая позволит сохранить работу пользователя.
Кто-то это реализует через временные файлы, мы решили делать это через встраиваемую базу.

В поисках быстрого локального хранилища

В поисках быстрого локального хранилища

0
Спасибо за наводку.
Если по максимуму использует оперативную память, то это может для нас быть проблемой.
В 2017 году MS VS и MS SMS это 32 битные приложение, а значит мы делим с ними жалкие 3.25(по факту меньше) оперативной памяти.

В поисках быстрого локального хранилища

В поисках быстрого локального хранилища

0
Почитал про эту функцию. Насколько я понимаю, для того чтобы ею воспользоваться файл должен сперва оказаться на диске, верно? Если это так, то нам это не подходит, по причине, что интерес этой фичи представляется именно для несохраненных/измененных файлов. Или я где-то не прав?

В поисках быстрого локального хранилища

0
Как-то в Сети не почти ничего про эту технологию. Можете рассказать или навести на правильные ссылки?

В поисках быстрого локального хранилища

0
Мой тест имел кое-какую специфику, о которой я писал:
Мы храним текст построчно, а значит хотим и сохранять и вычитывать тоже построчно. К тому же при вычитке одним куском рискуем нарваться на огромный memory allocation, и нарваться на него же при сохранении, если для этого нужно склеить все строки вместе. В LiteDB есть возможность скормить IEnumerable и он отлично сохранится, и отлично вычитается. В SQLite строка в документе представляла собой строку в базе. Получается для документа в 100 строк, выполнялось 100 инсертов, что было дольше чем выполнить 1 в LiteDB.

В поисках быстрого локального хранилища

0
Не очень пойму как мог бы помочь sqlite json extension. Это ведь набор функций для работы с json или я не прав?
Если это действительно всего лишь набор функций, то думаю еще бы потерял в скорости, генерируя для вставки в базу из текста json, а потом разбирая его, пусть даже последним бы и занималась SQLite. SQLite реляционная база и я ожидал от нее наибольшей производительности именно если складывать в нее реляционные данные.

Режим журналирования SQLite: PRAGMA journal_mode = OFF
Использовал по транзакции на файл.
Так же и litedb все льется одним insert'ом, что, пусть и с натяжкой, с натяжкой можно считать одной транзакцией.

В поисках быстрого локального хранилища

0
Сохраняется текущее состояние без возможности undo.
Намек, что-то не очень понял. Вы про VCS?

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

Поиск утечки GDI объектов: Как загнать мастодонта

0
Ничего себе. На этот круг ада благо еще не приходилось спускаться. Спасибо за ссылки и интересный трюк.
Буду иметь ввиду в моменты глубокого отчаяния)

Поиск утечки GDI объектов: Как загнать мастодонта

0
Спасибо за комментарий. Сейчас проверил, breakpoint сработал отлично, но установить condition никак не получается.
В доке написано, что аргумент называется crColor.
А без аргументов становится очень тяжело трассировать что-то внятное… Возможно есть способ достать стек, но мне кажется аргументы более точно идетифицируют утекающий объект.

Поиск утечки GDI объектов: Как загнать мастодонта

0
Пора идти за книгой по perl. Часто внутренний/внешний голос говорит, что задача хорошо решается перлом.

Поиск утечки GDI объектов: Как загнать мастодонта

0
Да в шарпе есть очень четкий набор правил, как использовать unmanaged ресурсы.
1. Никогда не используйте unmanaged ресурсы.
2. Если никогда наступило, то оберните ресурс в класс, задачей которого будет следить за этим ресурсом. В классе должен присутствовать Dispose и финализатор/деструктор, оба освобождающие ресурс.
Обойтись одним деструктором, увы, не получится, так как в c# уж очень недерменирована его работа.

По этому принципу написаны все объекты из System.Drawing.

Про трюк с #define. В таком виде в шарпе его не провернуть. Но мне кажется он не будет корректно работать и на плюсах или си, поправьте, если ошибаюсь.
#define на плюсах это директива препроцессора, тоесть «выполняется» на этапе компиляции. А, что если вызов интересующего Вас метода происходит из подключенной dll библиотеки? Мне кажется трюк с #define не сможет поймать такой трюк, хотя мог где-то и ошибиться в размышлениях.
Есть трюк который точно сработает, он был моим последним вариантом, на случай, если вообще ничего не будет помогать:
Подменить в памяти вызовы нативной функции на свои. Когда-то читал, что так можно делать, но полного представления что-именно нужно для этого написать нету, потому рад что не пришлось спуститься на последний круг ада. Хотя если бы пришлось, то изменилось бы не так много: собрать лог, найти что не удаляется, остановить отладку в момент создания текущего объекта. Разве что лог пришлось бы собирать самому.

Поиск утечки GDI объектов: Как загнать мастодонта

+1
Кстати, была идея написать подобную тулу, но быстро испугался объема работы.
Хотя с радостью увидел бы такую фичу в каком-нибудь dotMemory и ему подобных.

Поиск утечки GDI объектов: Как загнать мастодонта

0
Я правильно понял, у Вас была утечка памяти? Почему пришлось идти именно таким путем, а не использовать профилировщик?

А поделитесь секретом — насколько локализован был баг на небольшой площади кода? В смысле ну статический анализ смог бы найти?

А вот здесь интересно вышло. Утечек было 3:
1. Самая интенсивная. Была донельзя банальна: не вызывался Dispose объекту, который не отписывал от событий дюжину других объектов, которые оставались висеть в памяти и держать объекты, которые держали GDI-wrapping-objects.
2. Наименее интенсивная. Была в нашем коде. И думаю могла пойматься бы статическим анализатором, но боюсь кроме дельных срабатываний анализатор выдал бы еще очень много ложных срабатываний, где мог бы просто потеряться.
3. Средней интенсивности. Оказалась в коде third-party библиотеки, доступа к коду которой не оказалось. И здесь было бы не на что натравить анализатор.

Поиск утечки GDI объектов: Как загнать мастодонта

+1
У меня была мысль написать программу, которая бы подменяла адреса нативных функций на мои, не был уверен, как именно это сделать, но мне подвернулась эта тула и необходимость писать что-то свое отпала.
И еще одна проблема: не уверен, что получилось бы вытянуть корректный и полный стек в смешанной(управляемой и неуправляемой) среде.

Еще часто просто стека может оказаться мало, потому может оказаться полезным получить возможность отладки именно с момента создания утекающего объекта.

Был бы рад состряпай Вы статью на эту тему, потому как похоже эта одна из проблем о которых не принято говорить. А найти что-то дельное по ней так и вообще невозможно. С удовольствием прочту Ваш вариант.

Поиск утечки GDI объектов: Как загнать мастодонта

Перехват функций .NET/CLR

0
Большое спасибо за статью. Я лишь мог подозревать, что такое должно быть возможно.
Много интересной информации о внутреннем устройстве CLR

Только созрел вопрос, ради любопытства только:
Работоспособность приведенного алгоритма была неоднократно проверена на практике (в том числе, в промышленных разработках) на различных версиях .NET и аппаратных платформах.


Если не секрет, в какой сфере получилось использовать эти навыки? Чертовски интересно услышать какой-то пример.

Что нового появилось в C# 7 и уже поддерживается в Visual Studio “15” Preview 4

+1
Люди добрые, объясните темному бедолаге зачем могут быть нужны локальные функции? Что они делают такое чего не покрывают лямбды?

C# — есть ли что-то лишнее?

+2
Пока не понял необходимости данной фичи, в каких ситуациях она будет полезнее, чем вернуть класс/структуру или же использовать out-аргументы.

Как минимум, ref/out параметры нельзя использовать для async методов(что даже выглядит логичным), а плодить классы для единственного приватного метода, который бы их вернул, не хочется.

Мультиплеер в быстрых играх (Часть III: появление врага)

0
Все равно грустно это все.
WebRtc он же чуть более чем полностью заточен на передачу видео/аудио.
Скорее всего выйдет доработать напильником, что бы передавать, что хочешь, но вероятно много кровавых слез упадет пока все получится.
И еще больше потом при поддержке(

Вот не дает JS себя полюбить. Слишком много искусственных ограничений об которые сломаешь себе шею.

Мультиплеер в быстрых играх (Часть III: появление врага)

+1
Еще и чертов http-handshake от которого волосы дыбом становятся.
Не знаете, может уже появилась возможность из браузера по средствам js достучаться до udp сокетов?

Новый механизм вкладок для облачной IDE

0
А еще было бы чертовски интересно увидеть статью о том, как будете делать умный автокомплит и рефакторинг, темы чертовски сложные и не слишком освещенные.

Новый механизм вкладок для облачной IDE

0
А почему так сосредоточились на важности отображения языка программирования для файла. Я, пользуясь настольными IDE, вообще никогда об этом не задумываюсь т.к. они гарантируют правильную связку и не до конца могу представить случай, когда мне это может понадобится. Я уверен, что файл с разрешением css откроется редактором css, html — редактором html, ts — typescript и.т.д.
Где это может быть полезно? В каком случае может понадобиться изменить связку для какого-то файла отдельно?

VK Offline — E-mail клиент и адресная книга на основе данных ваших профилей ВКонтакте

0
Хотел узнать насколько верное поведение, что при использовании приложения не обновляется статус онлайн/был онлайн в самой соц. сети.
Мне эта функция нравится, но не до конца понимаю фишка это или нет) И, наверное, если это фича, то должна быть опциональной.

Новый законопроект ограничивает общение россиян в мессенджерах

Семь итераций наивности или как я полтора года свою дебютную игру писал

0
Автор статьи сделал невероятный труд!
Мы с другом с пол года назад тоже делали игру, читая статью понял, что и сами прошли 7 кругов наивности, я отлично помню как мечтал отдохнуть после выпуска, хоть и не работал над игрой каждый день, хотя был момент, когда продержался 60 дней подряд.
Мне было бы интересно с ComradMax пообщаться, а не тулить свои неупорядоченные мысли в коммент на хабре. Если интересно пишите мне, поделимся граблями на которые наступали.

Skylines: новая игра вместо умершего SimCity

+2
Надеюсь что не разочаруюсь.
Когда-то почти год жизни потратил в SimCity3000, но она частенько вылетала, при чем зависало само сохранение, можно было перезагрузить компьютер, загрузить заново, и опять в один и тот же год она зависала.

На выходных буду строить новый город здесь.

Пишем с нуля квест на ASP.NET 5 (vNext) и Angular.js

Пишем с нуля квест на ASP.NET 5 (vNext) и Angular.js

Возможно, первая игра на Dart + Box2D

0
Размер всех исходников ~184KB
Размер всех сторонних пакетов ~1180KB
Размер JS файла на выходе ~984KB

От желания создать игру до запуска — один шаг

+1
Спасибо за статью.
Сам буквально недавно прошел этот путь, только это была довольно большая игра, ушло на нее более полу года работы двух человек, далеко не фултайм, но старались работать регулярно.
Я давно пробовал создать игру, никогда не получалась довести до конца, потому читал много статей «как закончить игру», наконец закончили, но к запуску, как оказалось был полностью не готов. Сейчас приложение ВК насчитывает около тысячи пользователей, приложение в ФБ всего пару сотен, а на рекламу ушло около 100$. К сожалению, ВК почему-то не пустили меня в раздел новые, мотивировав это недостаточным качеством приложения… Возможно. Но в разделе новые я точно видел игры хуже, на мой субъективный взгляд.
Еще раз спасибо за статью.

Возможно, первая игра на Dart + Box2D

0
Спасибо за совет, добавили кнопку. Посмотрим как пользователи поведут себя дальше.
Что еще из интерфейса показалось непреодолимым? Будем разбираться и исправлять.

Возможно, первая игра на Dart + Box2D

0
Есть много действительно крутых и удобных штук, но все же языку нужна поддержка, гугл ее может дать, но не понятно хочет и будет ли. Пока язык как будто в подвешенном состоянии.