Обновить
87.61

C# *

Объектно-ориентированный язык программирования

Сначала показывать
Порог рейтинга
Уровень сложности

Делаем отгружаемые сборки: взаимодействуем между доменами без маршаллинга

Время на прочтение3 мин
Охват и читатели13K


Ссылка на проект в GitHub: DotNetEx

На множественных ресурсах время от времени задается вопрос. Можно ли сделать отгружаемые сборки с текущего домена? Так, чтобы попользовался и «давай, до свидания!»? Везде и всегда ответ, который давался – это «нет». Ведь единственное, что можно выгрузить – это домен. Соответственно, если хочется наладить отгрузку, сборку надо помещать в домен, и налаживать между доменами взаимодействие через сериализуемые типы. А это — очень медленное взаимодействие. А мы скажем так. Можно. С ньюансами. Загружать мы будем также в отдельный домен. Но отменим сериализацию при вызове методов между доменами.

Вопросы, которые мы будем решать:
  • Создание домена с возможностью отдачи объекта из домена в родительский
  • Выгрузка сборки

Читать дальше →

Снимаем дамп объектов с памяти .Net приложения

Время на прочтение11 мин
Охват и читатели24K
Продолжаем тему интересного на .Net, от чего мир Java будет посмеиваться (хотя у них это также возможно сделать), а приверженцы С++ говорить: «чего они только не сделают чтобы не учить C++».

В данной заметке мы напишем по сути – простенькое ядрышко профилировщика памяти для платформы .Net, который будет снимать дамп с SOH кучи (а в перспективе и с LOH).

Для написания статьи нам понадобится код из статьи Получение указателя на объект .Net и Ручное клонирование потока (измерение размера объектов).

Наши цели на сегодня:
  • Научиться итерировать кучу .Net
  • Научиться находить начало кучи .Net
  • Попробовать сытерировать все объекты чужого домена.


Ссылка на проект в GitHub: DotNetEx

Читать дальше →

Roslyn: встреча .Net сообщества на CLRium #2

Время на прочтение2 мин
Охват и читатели8K
Довольно долгое время я пытался изучить Roslyn, но как и все мы, столкнулся с единой проблемой: времени на это абсолютно не было. Как обычно решается этот вопрос? Мы идем на множество ресурсов и ищем доклады и статьи на интересующую нас тему и как по шаблону повторяем движения автора, который показывает как этим пользоваться. С чем мы сталкиваемся, когда ищем описания тем, предложенных на CLRium? Мы не находим ничего. Т.е., конечно, Google выдает что-то по запросам “Roslyn”, “Roslyn samples”, но все-таки это тысячу раз разжеванные примеры, и притом древние как мамонты по меркам выхода новых версий CTP. Это важно, т.к. наличие информации предполагает развитость той или иной инфраструктуры. А самая крутая но не единственная статья по Roslyn на данный момент — это эта: Roslyn для автоматического перевода кода C# в 1С-код
Отсюда и возникли идеи рассказать на CLRium про Roslyn, RyuJIT, CoreFx, шаринг объектов между процессами и прочие вопросы, на которые сложно найти ответы в сети Интернет.
Список тем, которые будут раскрыты Кодом

Продолжаем кромсать CLR: пул объектов .Net вне куч SOH/LOH

Время на прочтение6 мин
Охват и читатели19K
Добрый день, уважаемые разработчики (просто не знал, с чего начать пост). Предлагаю перед тем как начнется трудовая неделя немного подразмять мозги (совсем немного) и построить свой Small Objects Heap для .Net. Вернее даже не Small Objects Heap, а Custom Objects Heap.

Как все мы знаем, в .Net существует две группы куч: для больших и малых объектов. Как выяснить, во сколько нам обойдется объект можно при помощи кода из этой статьи (он нам пригодится): Ручное клонирование потока, а получить указатель на объект и по указателю получить сам объект можно научиться, прочтя эту статью: Получение указателя на объект .Net. Также нам понадобится статья корейского (южно-) программиста по перенаправлению указателя на скомпилированную часть метода на другой метод: 실행 시에 메서드 가로채기 — CLR Injection: Runtime Method Replacer 개선

Так что давайте поэкспериментируем и напишем библиотеку, которая позволит:
  • Аллоцировать участок памяти
  • Разметить его как набор объектов определенного .Net типа
  • Выделять объекты с этой памяти
  • Возвращать их обратно


Ссылка на проект на GitHub: DotNetEx

Читать дальше →

Интересное по хабу .Net за 2014 год

Время на прочтение2 мин
Охват и читатели26K
Мы с вами люди рабочие и зачастую не замечаем ничего что происходит за пределами нашей работы. Так и я, работая изо дня в день, знаю только про свой SpecFlow и смежные вопросы. Но ничего – по сторонам. Этим постом я хочу восполнить пробелы новостей в области .Net

Новости хаба .Net на Хабре занимают 33 страницы или 328 постов. Что говорит о том что новости появляются почти каждый день =) Посмотрим на самое интересное из них (на мой скромный взгляд). Ну и загляните под кат: до ката, конечно же, не все.

Доступен новый JIT: теперь с поддержкой SIMD
Как работает декомпиляция в .Net или Java на примере .Net
Microsoft раскрыла исходный код компилятора С#
Consulo: ~1000 коммитов, или как прошла осень
Под капотом у Stopwatch
Как тестировать код финализатора (c#). Послесловие: тест все-таки упал
Посмотреть на прочие статьи

Reflection.Emit: инициализация массива

Время на прочтение4 мин
Охват и читатели15K
Логичным дополнением к прошлой статье был-бы наглядный пример, хотя-бы для того, чтобы показать что не так страшен чёрт, как его рисуют, и на самом деле даже если вам необходимо собрать инициализатор массива через Reflection.Emit, то большинство лишних телодвижений возьмёт на себя API, а от вас остаётся, по большей части, только слизать придуманный компилятором код из прошлой статьи. В этом примере я ограничусь простым статическим массивом на 3 System.Int32 элемента.
В прорубь

Локальные учётные записи в Microsoft Azure Mobile Services

Время на прочтение4 мин
Охват и читатели4.7K
Ещё одна недостаточно описанная тема про Microsoft Azure Mobile Services — авторизация, которая к тому ж налажена лишь в последних версиях. Разумеется, с самых ранних версий было перечисление MobileServiceAuthenticationProvider, позволявшее простым способом выполнить авторизацию одним из заданных методов. Но вряд ли этот набор — всегда самое удобное решение для пользователей. Тут возможно два направления расширения — добавление новых вариантов механизма OpenId или свой механизм авторизации. Далее будет рассмотрен второй вариант.
Читать дальше →

C#: Внутреннее строение инициализаторов массивов

Время на прочтение6 мин
Охват и читатели30K
Наверняка почти каждому, кто имел дело с C#, известна подобная конструкция:

int[] ints = new int[3] { 1,2,3 };//А если уж вдруг и не была известна, то отныне и впредь уж точно

Вполне логично было-бы ожидать превращение этой конструкции в нечто подобное:

int[] ints = new int[3]; 
ints[0] = 1; 
ints[1] = 2; 
ints[2] = 3;

Увы и ах, на деле орех гораздо более морщинист, чем кажется с первого взгляда, и имеются некоторые тонкости, на которые будет указано позже. А до тех пор, наденем ношеную «IL freak» майку (у кого имеется) и погрузимся в недра реализации.
Погрузись, и ты узнаешь насколько глубока кроличья нора

Парсинг формул с функциями

Время на прочтение10 мин
Охват и читатели21K
Доброго времени суток!

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

В интернете много решений, но все не то, или не так. Или без формул, или без переменных или простейшие возможности типа «1+(2-3)/4». Зато большинство ответов были в сторону лексического анализа и обратной польской нотации. Вот их я и применил, взяв примеры с разных источников.

Сначала разберем лексический анализ. Потому что простой анализ формулы по символам с поиском в ней функций, операторов, переменных и прочего получился бы крайне нечитабельный.

Реализацию алгоритмов можно взять в интернете и подредактировать под свои нужды.

Для лексического анализа внес небольшие изменения:
  • загрузка списка переменных. В конструкторе происходит замена переменных их значениями;
  • замена разделителей целой-дробной части числа на тот что используется в системе;
  • добавил унарный минус;
  • удалил лишние для меня лексемы.

Вот что получилось. Ниже будет ссылка на исходники.
Читать дальше →

Встреча .Net сообщества на CLRium #2. Как устроен и работает CLR, Roslyn, RyuJIT, CoreFx

Время на прочтение4 мин
Охват и читатели8.7K
Я не люблю заезженное слово «конференция». Это — встреча разработчиков с общими интересами, которые хотят послушать о трюках, которые позволяют обходить правила, установленные в.Net Framework, которым интересна тема использования меняющих и создающих языки, тулов. А также, что можно получить если знаешь как компилировать и декомпилировать приложение. Об этом не говорят. Потому что разговор на эту тему слишком долгий чтобы уместить в формат одного часа стандартного выступления на конференциях. Я пробовал выступать на .NEXT, и помимо положительных отзывов были «галопом по Европам». Согласен, за час не уложиться. Добро пожаловать в полный формат!

Я надеюсь, в вашей памяти теплится еще прошлый CLRium и сейчас никто не отчаивается и яро смотрит на технологии и все с удовольствием готовы их поглощать. Я помню и время от времени поглядываю на ваши многочисленные отзывы, которые греют мое желание провести все еще раз. Причем на этот раз — с хорошей и полезной практикой.

Теперь у нас целых два дня. Причем вы можете купить билет как на один, так и на оба дня. Первый день — как в прошлый раз: много хардкора, не практичного, но очень интересного… Позволяющего еще лучше понять как все работает и как этим можно воспользоваться… Тем со временем еще немного накидаю. Много мяса на любителя. И второй — практика. Второй длиннее первого. На час =). Во второй день будет очень много Roslyn, JetBrains Nitra (он же N2, он же Nemerle2)? RyuJIT, .Net Framework open sourced. Вот честно, я бы сам сходил

Почитать и зарегистрироваться



cool Примеры статей и полный список тем выступлений — под катом
Читать дальше →

Типичные исправления после обновления Windows Store приложений с версии 8 до 8.1

Время на прочтение4 мин
Охват и читатели11K

Переводя свои приложения на платформу 8.1, я обнаружил, что это довольно несложное занятие, которое не требует особых усилий.
После перевода зачастую возникают типовые предупреждения, возникшие в результате несоответствия платформ. Разумеется, эти предупреждения желательно исправить.
Рассмотрим самые популярные исправления?
Да, рассмотрим их вместе!

.NEXT в Москве: как хардкорная .NET-конференция покоряла столицу

Время на прочтение5 мин
Охват и читатели6.6K
Когда весной в Петербурге впервые прошла конференция .NEXT, она собрала более 300 .NET-программистов, включая приехавших из других городов. Стало очевидно, что с такой востребованностью есть смысл замахнуться на большее — и вторую .NEXT устроили в Москве. В пику MsDevCon, dotnetconf и Go# её было решено сделать чисто техническим (а местами и вовсе хардкорным) мероприятием: если на петербургской Java-конференции Joker, организованной в ноябре той же командой, зажигал Джигурда, то здесь планировались исключительно технические доклады по делу. Они, разумеется, полезны и важны — но не стала ли конференция вместо яркого мероприятия безжизненным набором сухих инструкций? А о чем именно на ней рассказывали? Какие моменты стали самыми яркими? Все ответы — под катом.



Читать дальше →

Consulo Beta продолжится в 2015 году

Время на прочтение2 мин
Охват и читатели11K
Для тех кто пропустил мои посты:
Consulo — это форк IntelliJ IDEA Community Edition, который имеет поддержку .NET(C# на текущий момент, и на этот сектор пока идет большой акцент), Java, Javascript(NodeJS).

Здравствуй Хабр. В моих предыдущих постах (тык, тык), я показал хорошие возможности плагина C#, да и сама платформа вполне стабильно работает. Можно было выйти в реализ, но — это не только написать код. Нужен как минимум сайт, что бы не отдавать Night Builds пользователям, но увы — имею ограниченные возможности.

Читать дальше →

Ближайшие события

Concurrency структуры в .net. ConcurrentQueue изнутри

Время на прочтение4 мин
Охват и читатели34K
ConcurrentQueue можно отнести к lock-free конкурентным структурам данных. В ее реализации нет блокировок (lock, Mutex…) и реализована она с использованием:
— классической функции CompareExchange;
— SpinWait
— volatile (используется как memory-barrier)
В основу ConcurrentQueue заложена структура ring-buffer (кольцевой буфер).
Читать дальше →

Concurrency структуры в .net. ConcurrentDictionary изнутри

Время на прочтение4 мин
Охват и читатели44K
Все началось с одного собеседования, которое и натолкнуло меня к написанию данной статьи. Довольно большая часть разработчиков на платформе .Net не понимает базовые вещи, хотя и использует их повседневно, например lock-ом оборачивают все методы, использующие ConcurrentDictionary, хотя можно было бы обойтись обычным Dictionary<>.

В науке существуют 3 основных способа реализации конкурентных структур данных:
• Lock-free структуры данных;
• Fine-grained блокировка;
• Transactional memory implementation(транзакционная память);

ConcurrentDictionary<TKey, TValue> — это thread-safe аналог Dictionary<TKey, TValue>. В его основе лежит, так называемый Fine-grained блокировка.
Читать дальше →

Простая система событий — нестандартный подход

Время на прочтение5 мин
Охват и читатели9.5K
Данная заметка является логическим продолжением поста «SMessage — Простая и предсказуемая система событий для Unity». Пользователь erlioniel описал два подхода к построению собственной системы сообщений: с использованием перечислений и классов-сообщений. В своей заметке я хочу рассказать о возможном пути смешения этих подходов и о велосипеде, который может из этого получиться.
Ненормальное программирование

Параллельная загрузка данных с временными ограничениями

Время на прочтение4 мин
Охват и читатели4.6K
Бывают ситуации, когда необходимо получить данные из нескольких удалённых источников, но так, чтобы время ожидание было не слишком большим. Например, при загрузке данных о погоде или курсе валюты, мы можем опросить несколько сервисов и отобразить результаты всех ответивших за заданный промежуток времени.



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

Итого, мы оперируем тремя базовыми параметрами:
  • Приемлемым временем ожидания
  • Минимально необходимым количеством источников
  • Дополнительным временем ожидания

Читать дальше →

Occlusion Culling и LOD для Unity Indie

Время на прочтение2 мин
Охват и читатели16K
Доброго времени суток! В качестве хобби ковыряю движок Unity. Хобби явно некоммерческое, поэтому особой нужды в Pro-версии не испытываю. Pro, конечно же, посурьезнее Indie, но для разработки, например, под Android/iOS возможностей второй вполне хватает. За исключением одной – оптимизации и связанного инструментария.

Раскидистая клюква, созданная силами движка имеет полторы — две тысячи треугольников. Высокополигональный замок/машинка заставляют картинку в среднем телефоне шизофренически подергиваться, а красивый шейдер для воды — надолго застыть в позе роденовского мыслителя. Ясно, что при появлении в кадре пары — тройки таких объектов, все будет жутко глючить и тормозить.

В Pro есть крайне нужная штука, называется Occlusion Culling. Кратко – отрисовываются только объекты, попадающие в поле зрения камеры (скриншоты под катом). Посмотрел опять на стоимость Pro, почесал затылок, обиделся и ушел сначала искать, а потом и писать костыли.
Читать дальше →

Roslyn для автоматического перевода кода C# в 1С-код

Время на прочтение11 мин
Охват и читатели19K
Появилась идея посмотреть, как будет выглядеть объектно-ориентированный подход в 1С, язык которой очень ограничен в средствах и не предусматривает определение классов. Программа по автоматическому переводу определений классов C# в другой язык позволила бы менять генерируемый код по мере появления новых идей. Поиски средств реализации привели к проекту Roslyn – открытому компилятору C#.

Roslyn – это открытая платформа компиляции C# и Visual Basic. Roslyn выполняет два основных действия: строит синтаксическое дерево (парсинг) и компилирует синтаксическое дерево. Дополнительно позволяет анализировать исходный код, рекурсивно обходить его, работать с проектами Visual Studio, выполнять код на лету.

Обратите внимание, что на данный момент Roslyn в стадии Бета. Исходя из этого, со временем в компиляторе может что-то поменяться.
Читать дальше →

Как «незнайка» игру делал

Время на прочтение3 мин
Охват и читатели8.3K

Предисловие


Доброго времени суток, уважаемые читатели. Я – учащийся с кучей свободного времени и желания. Решил поделиться своим опытом в создании простейших игр и написать об этом на Хабрахабр. Надеюсь, я смогу ответить на чьи-либо вопросы, или хотя бы занять минутку вашего времени интересным рассказом. Итак, поехали.
Читать дальше →

Вклад авторов