Все потоки
Поиск
Написать публикацию
Обновить
273.54

C# *

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

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

Бенчмаркая Array Reverse: как быстро перевернуть массив?

Уровень сложностиПростой
Время на прочтение12 мин
Количество просмотров4.5K

Уважаемые читатели, в этой статье я хочу рассказать о небольших тестах получения обратного массива и представить свои выводы. Тесты сделаны на .net 7.

Тестировал с использованием BenchmarkDotNet, так что каждый может проверить результаты и сделать свои выводы.

Сразу отмечу, что для тестов используется атрибут [GlobalSetup], что позволяет не переживать о стартовых данных, так как они будут «Executed once per each N value» и это нам и надо.

Для полной картины происходящего основные тесты идут на массивах с количеством элементов 1000, 10_000, 100_000, 1_000_000, 100_000_000, а самый последний с добавлением до 1_000_000_000 чисел.

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

Для старта используется обычный While, представленный в более удобной записи, чем аналоги на просторах сети:

Читать далее

Как написать генератор кода который сможет поддерживать даже твоя бабушка?

Время на прочтение3 мин
Количество просмотров4.1K

Недавно мне понадобилось написать генератор кода для одного из своих проектов. Так как надо было обеспечить поддержку Unity 2021, от более современного API — incremental generators пришлось отказаться сразу. Но пост не об этом, а о том, как повысить читаемость и поддерживаемость синтаксического дерева для генерации исходного кода.

Читать далее

Уязвимость XSS в приложении ASP.NET: разбираем CVE-2023-24322 в CMS mojoPortal

Время на прочтение9 мин
Количество просмотров2.9K

1054_XSS_mojoPortal_ru/image1.png
В этой статье изучим с разных сторон уязвимость XSS в CMS, написанной на C#. Вспомним теорию, разберёмся, как дефект безопасности выглядит со стороны пользователя и кода, а также поупражняемся в составлении эксплойтов.

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

Динамические методы в .NET (часть 2)

Уровень сложностиСредний
Время на прочтение6 мин
Количество просмотров6.3K

В предыдущей статье я начал свой рассказ динамические методы.

Мы узнали, как создать простейший динамический метод, в общих чертах обсудили, как работает стековая машина и рассмотрели некоторые простейшие операции Common Intermediate Language, которые можно использовать при генерации методов в runtime, такие как работу с константами, математические и битовые операции, а также работу с аргументами методов и локальными переменными.

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

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

Читать далее

Reciprocal throughput

Уровень сложностиПростой
Время на прочтение10 мин
Количество просмотров10K

Современные процессоры очень круты. Они таят в себе великое множество секретов и невероятных возможностей. И просто восхитительно, что некоторые из способностей процессоров легко продемонстрировать даже из такого высокоуровневого языка, как C#, буквально за десять строчек кода!

Читать далее

enum class и мой первый раз (использования Source Generator)

Уровень сложностиПростой
Время на прочтение15 мин
Количество просмотров2.8K

Приветствую.

Выбор между enum и собственным классом перечислений в C# был для меня сложной темой. Но когда увидел enum class из Kotlin, мое мировоззрение немного поменялось, я захотел иметь их в C#.

Но делать proposal мне не хотелось. И тут я вспомнил про генераторы исходного кода, добавленные в .NET 5, и решил, что пришло время их потрогать.

В этой статье я сфокусировался на проблемах и важных местах при разработке генераторов, нежели на создании туториала или восхваления полученного генератора (но все равно попробуйте)

Читать далее

Обезличенный вызов делегатов в C#

Уровень сложностиСредний
Время на прочтение10 мин
Количество просмотров6.1K

Как говорится: сидел, никого не трогал, программировал на C#, и тут родилась «хитрая» нужда. В рамках одного из своих проектов мне понадобился механизм обезличенного вызова делегатов, который бы позволил организовать их универсальные хранение и вызов. Также, главной целью разработки являлся уход от необходимости вызова методов конкретных экземпляров объектов через рефлексию (рефлексия используется только на этапе инициализации), что в конечном счете сильно увеличило производительность.

Обезличенный вызов делегата - вызов делегата с известным количеством параметров, но с неизвестными типами параметров, где каждый тип параметра представлен базовым классом Object. Пример: Action<string, int> преобразуется в Action<object, object>.

Читать далее

Переосмысление SOLID: почему традиционные принципы проектирования не работают при разработке игр

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров9.9K

Принципы SOLID (Single Responsibility, Open-Closed, Liskov Substitution, Interface Segregation, and Dependency Inversion) - это общепризнанные рекомендации, разработанные для улучшения сопровождаемости и читаемости исходного кода программного обеспечения. Однако их применение в сфере разработки игр часто оказывается сложным из-за уникальных особенностей этой области. Чтобы полностью оценить контекст, мы погрузимся в эти сложности и изучим альтернативные парадигмы проектирования, которые лучше подходят для динамичной природы разработки игр.

Читать далее

Адаптируем код .NET Core под Linux

Время на прочтение8 мин
Количество просмотров12K
image

Введение


Однажды перед нами была поставлена задача: портировать набор приложений на C# с Windows/.NET Framework на Linux/.NET Core. Я полагаю, что для Microsoft мы были клиентом с рабочими нагрузками, которые было бы интересно поддерживать с помощью .NET Core. В то время я не понимал, насколько сильным было их стремление работать с нами. Наш подход к Open Source был решающим фактором.

Насколько сложной она может быть? Ну… в этом посте мы расскажем вам о трудностях, с которыми нам пришлось столкнуться, чтобы запускать, контролировать и отлаживать наши приложения.
Читать дальше →

RavenDB и PVS-Studio: коллаборация, от которой выигрывают все

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров1.2K

Небольшая история про сотрудничество PVS-Studio и RavenDB. PVS-Studio — статический анализатор для улучшения кода. RavenDB — Open Source база данных. Как поиск ошибок в одном проекте приводит к улучшению сразу двух? Ответим на этот вопрос, а также посмотрим на исправления найденных проблем и комментарии разработчиков.

Читать далее

Как написать игру на Monogame, не привлекая внимания санитаров. Часть 5, открываем царство многоклеточных

Уровень сложностиСредний
Время на прочтение9 мин
Количество просмотров2.1K

Предыдущие части: Часть 0Часть 1, Часть 2, Часть 3, Часть 4

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

Читать далее

Как на самом деле работает Async/Await в C# (Часть 7)

Уровень сложностиСложный
Время на прочтение13 мин
Количество просмотров16K

Несколько недель назад в блоге «.NET Blog» появилась статья «Что такое .NET, и почему вы должны выбрать его?». В нем был представлен высокоуровневый обзор платформы, кратко описаны различные компоненты и архитектурные решения, а также обещаны более подробные посты по затронутым темам. Этот пост является первым таким продолжением, в котором подробно рассматривается история создания, архитектурные решения и детали реализации async/await в C# и .NET.

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

Читать далее

Пример интеграции мессенджера с DLP-системой InfoWatch Traffic Monitor через API

Уровень сложностиСредний
Время на прочтение12 мин
Количество просмотров4.9K

В этой статье мы расскажем, как внешние приложения и сервисы могут взаимодействовать с DLP-системой InfoWatch Traffic Monitor (далее ТМ) через API. API-интерфейс в TM разработан уже давно, но в последний год интерес к нему со стороны сторонних разработчиков значительно вырос. Интеграторы и вендоры обычно хотят интегрировать DLP- системы с нуля в ИТ-ландшафт организации, импортозаместить прежние иностранные системы, расширить количество контролируемых DLP-системой каналов и аккумулировать информацию из нескольких систем в одной. Мы анализируем кросс-продуктовые сценарии и видим, что API является наиболее эффективным и современным средством решения подобных задач. Поэтому мы решили рассказать про наш API-интерфейс и продемонстрировать его работу на практических примерах.

Сценариев интеграции довольно много, поэтому мы рассмотрим самую популярную задачу - отправку событий из корпоративного мессенджера в DLP TM на контентный анализ. Для пущей сложности мы взяли самописный мессенджер Stack chat, а еще решили отправлять в DLP не только переписку, но и пересылаемые корпоративные файлы. Не секрет, что корпоративный мессенджер - это основное оперативное средство коммуникации любой динамичной организации. А благодаря своим интеграциям со средствами телефонии, сетевыми каталогами, CRM и корпоративными порталами, он же - канал утечки конфиденциальной информации.

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

Читать далее

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

Бенчмаркая строки и циклы: Replace, Split и Substring

Уровень сложностиПростой
Время на прочтение9 мин
Количество просмотров5.1K

Уважаемые читатели, в этой статье я хочу рассказать о небольших тестах со строками и представить свои выводы. Тесты сделаны на .net 7.

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

Все тесты сделаны с использованием BenchmarkDotNet, так что каждый может проверить результаты и сделать свои выводы.

Хочется начать с string.Replace, который проверяется разными вариантами, начиная с базового.

Читать далее

ASP.Net Core: реализуем проверку Google reCAPTCHA V2

Время на прочтение5 мин
Количество просмотров3.3K

В этой статье Мудассар Хан (Mudassar Khan) продемонстрирует нам, как реализовать проверку Google reCAPTCHA V2 (версии 2.0) в ASP.Net Core MVC. 

Приведенный в этой статье пример демонстрирует, как Google reCAPTCHA V2 проверяет ответы с капчей от пользователей, получаемые из коллбэк-функций в JavaScript.

Читать далее

Книга «ASP.NET Core Security» в правильном переводе команды DotNetRu

Время на прочтение4 мин
Количество просмотров6.3K

Сообщество DotNetRu совместно с издательством ДМК Пресс договорились на доработку и проверку перевода очередной книги. Напомним, что мы уже помогли выпустить три книги: «Управление памятью в .NET для профессионалов» Конрада Кокосы,  «ASP.NET Core в действии» Эндрю Лока и «EF Core в действии» Джона Смита. Издатель делает первоначальный перевод, а ребята из сообщества в качестве экспертов корректируют текст, придавая переводу оригинальный и непротиворечивый смысл.

Мы продолжили использовать хорошо зарекомендовавший себя подход — выделили каждую главу в отдельный документ, создали таблицу, в которой фиксировали процесс по каждой главе. С каждой главой независимо работали два-три редактора и предлагали свои правки. После чего отдельный редактор вычитывал главу и применял внесенные поправки к документу. Это позволило распараллелить работу и быть всем участникам максимально независимыми. После того, как перевод был готов, несколько редакторов прочли всю книгу и внесли финальные изменения.

Рады представить вам очередной результат совместных усилий: книга Кристиана Венца «Безопасность ASP.Net Core» в правильном переводе DotNetRu. В продолжении поста — впечатления о процессе перевода от непосредственных участников и промокод на скидку от издательства.

Читать далее

BTCPay Server: топ-10 ошибок в коде финансового приложения для Bitcoin

Уровень сложностиПростой
Время на прочтение7 мин
Количество просмотров2K

Наша компания пишет много материалов на тему качества кода. Некоторые проекты, выбранные для аудита кода, не очень близки всем читателям, но все из вас точно пользуются финансовыми приложениями. Может, не конкретно этим, но статья о том, что разработка программ в этой сфере без применения подходов контроля качества несёт потенциальные риски для всех пользователей.

Читать далее

Решение концептуальной проблемы с Unity ECS. Messenger для System

Уровень сложностиСложный
Время на прочтение7 мин
Количество просмотров2.8K

Всем привет! В этой статье я подробно разобрал своё решение проблемы реализации "ивентов" в ориентированном на данные дизайне для Unity ECS. Если вы заинтересованы в Unity DOTS/ECS, то данная статья нацелена именно на вас.

Читать далее

ThreadPool. async/await

Уровень сложностиПростой
Время на прочтение13 мин
Количество просмотров9.9K

А вы никогда не задумывались, что async и await выглядят как-то инородно среди прочего C# кода? Больше нигде не встречается такого странного синтаксиса и таких модификаторов, кроме как в методах, работающих с Task и Task<T>.

А ещё интересно, сколько вообще стоит пользоваться async/await? И когда можно (нужно?) обходиться без них?

Читать далее

Модульная архитектура — анализ зависимостей

Уровень сложностиСложный
Время на прочтение4 мин
Количество просмотров2.2K

Как построить диаграмму зависимостей библиотек и посмотреть какие публичные объекты используются в зависимых библиотеках

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

Так-же, в случае если Common библиотеки собираются в отдельном решении - может быть полезно узнать - а какие публичные объекты из Common библиотек используются в других проектах или часть из этих публичных объектов уже не используется и их можно спокойно удалять или менять уровень видимости.

Читать далее

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