Pull to refresh
4
0
Send message

Катя. Фантастический рассказ

Reading time26 min
Views6.1K
Аудиокнига

— Нет. Забудь. Просто выброси из головы. Нет.
— Ты каждый раз так говоришь. Что бы я ни предложила.
— И я каждый раз прав.
Катя прищурилась. Ани́ понял, что сейчас она припомнит ему случай, когда он оказался неправ. А потом ещё один и ещё. У неё была хорошая память. И ясный ум. И с каждым днём она становилась всё умнее и умнее. Трудно управлять младшей сестрой, которая умнее тебя. Особенно Катей.
— Мы не будем угонять робота, — сказал Ани, стараясь вложить в голос весь свой авторитет. Потом осёкся, посмотрел по сторонам — и перешёл на шёпот:
— Ты с ума сошла? Хочешь под статью?
— Это не угон! — прошептала Катя. — В том-то и дело. Робот ничей!
Читать дальше →
Total votes 37: ↑32 and ↓5+27
Comments14

Сравниваем производительность C# и C++ в задачах обработки изображений

Reading time4 min
Views13K

Бытует мнение, что C# не место в вычислительных задачах, и мнение это вполне обоснованное: JIT-компилятор вынужден компилировать и оптимизировать код на лету в процессе выполнения программы с минимальными задержками, у него попросту нет возможности потратить больше вычислительных ресурсов, чтобы сгенерить более эффективный код, в отличие от компилятора C++, которые может потратить на это дело минуты и даже часы.

Однако, в последние годы эффективность JIT-компилятора заметно возросла, да и в сам фреймворк завезли ряд полезных фишек, например, интринсики.

И вот стало мне интересно: а можно ли в 2020 году, используя .NET 5.0, написать код, который бы не сильно уступал по производительности C++? Оказалось, что можно.

Читать далее
Total votes 28: ↑26 and ↓2+24
Comments43

На спор: прочитав до конца, вы поймёте, как и почему именно так работает GC

Reading time6 min
Views34K

Скажу сразу: я никогда не жду развёрнутого ответа на этот вопрос на собесах. Это глупо и в моем случае — эгоистично. Однако, на мой взгляд, помимо общего интереса к платформе, знать, как он работает очень полезно, т.к. это снимает целый ряд вопросов. Например, исключает вариант, когда разработчик считает, что Dispose вызывается автоматически и вызывать его самому не надо. Или же если разработчик более опытен, помогает ему автоматически, на уровне мышечной памяти писать код, приводящий к наименьшему количеству проблем.


Другой вопрос, что мне субъективно не очень нравится, как объясняется его работа. Потому, предлагаю альтернативный подход, описанный в моей книге, .NET Platform Architecture.


Если мы с вами будем досконально разбираться, почему были выбраны именно эти два алгоритма управления памятью: Sweep и Compact, нам для этого придётся рассматривать десятки алгоритмов управления памятью, которые существуют в мире: начиная обычными словарями, заканчивая очень сложными lock-free структурами. Вместо этого, оставив голову мыслям о полезном, мы просто обоснуем выбор и тем самым поймём, почему выбор был сделан именно таким. Мы более не смотрим в рекламный буклет ракеты-носителя: у нас на руках полный набор документации.


Спор взаимовыгоден: если будет не понятно, я подправлю не ясные моменты в книге, маленькой частью которой является данный текст.


Читать дальше →
Total votes 27: ↑22 and ↓5+17
Comments77

Вложенные привязки в WPF

Reading time5 min
Views23K
В WPF существует три вида привязок: Binding, PriorityBinding и MultiBinding. Все три привязки наследуются от одного базового класса BindingBase. PriorityBinding и MultiBinding позволяют к одному свойству привязать несколько других привязок, например:

<MultiBinding Converter="{StaticResource JoinStringConverter}" ConverterParameter=" ">
    <Binding Path="FirstName" />
    <Binding Path="MiddleName" />
    <Binding Path="LastName" />
</MultiBinding>

Исходный код класса JoinStringConverter
public class JoinStringConverter : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        var separator = parameter as string ?? " ";
        return string.Join(separator, values);
    }

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
    {
        var separator = parameter as string ?? " ";
        return (value as string)?.Split(new[] { separator }, StringSplitOptions.None).Cast<object>().ToArray();
    }
}


Список привязок MultiBinding-а — это коллекция типа Collection<BindingBase>. Логично было бы предположить, что внутри MultiBinding-а можно использовать еще один MultiBinding.
Читать дальше →
Total votes 20: ↑17 and ↓3+14
Comments3

Подводные камни WPF

Reading time20 min
Views81K
Каждый, кто достаточно долгое время разрабатывал приложения с использованием WPF, наверное, замечал, что этот фреймворк далеко не так прост в использовании, как может показаться на первый взгляд. В этой статье я попытался собрать некоторые наиболее типовые проблемы и способы их решения.
Читать дальше →
Total votes 45: ↑44 and ↓1+43
Comments21

Подборка курсов по разработке игр от Microsoft

Reading time1 min
Views35K


Разработка игр – одно из самых перспективных направлений в современном мире IT. Сегодня мы решили поделиться с вами подборкой самых востребованных, популярных и, что немаловажно, бесплатных курсов Microsoft, связанных с разработкой игр. Пять избранных курсов ждут вас под катом!
Читать дальше →
Total votes 25: ↑16 and ↓9+7
Comments12

Information

Rating
Does not participate
Location
Новосибирск, Новосибирская обл., Россия
Registered
Activity