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

C# *

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

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

Как создавать lock-free структуры данных в C# на базе CAS и Thread.Volatile

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

Привет, Хабр!

В многозадачности блокировки в старом добром понимании начинают становиться узким местом. Когда мы пытаемся использовать обычные синхронизации типа lock, Monitor или Mutex, начинается одна большая проблема: каждый поток, который захватывает блокировку, становится бутылочным горлышком для других.

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

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

Читать далее

Метод Contains коллекций в Entity Framework для SQL Server

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

Долгое время в метод Contains(), который используется в Entity Framework для фильтрации данных по списку значений, не вносили изменения. До выхода Entity Framework 8 коллекция с этим методом внутри оператора запросов where LINQ транслировалась в значения в виде констант внутри оператора IN для SQL. Если количество элементов равно одному, то преобразование происходило в выражение с оператором ‘=’ на стороне MS SQL Server. Аналогично транслируется и метод расширения Where() LINQ.

Использование в EF8 функции OPENJSON устраняет часть проблем с кэшем планов запросов для SQL Server, но не применимо к старым версиям (compatibility level) баз данных. Да и оптимальность генерируемого ею кода в некоторых случаях вызывает сомнения.

В недавно вышедшем Entity Framework 9 добавили больше настроек для возможности транслирования метода Contains() коллекций как с помощью OPENJSON, так и «по-старому» — в виде констант.

Читать далее

Новое в Pure.DI к концу 2024 года

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

Pure.DI — это не фреймворк или библиотека, а генератор исходного кода C# для создания композиций объектов в парадигме чистого DI. Последняя статья о Pure.DI выходила в апреле 2024 года. С тех пор прошло больше чем пол года, за это время основные усилия были сосредоточены на исправлении ошибок, увеличении производительности генерации кода и на удобстве использования. Давайте пройдемся по новым возможностям.

К новым возможностям

Как обновить библиотеку и утонуть в задаче. Обновление Roslyn и PVS-Studio 7.34

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

Ежегодно Microsoft выпускает новую версию .NET. Это большое событие, к которому мы выпускаем версию PVS-Studio с поддержкой нововведений. Сегодня речь пойдёт про боль PVS-Studio при обновлении Roslyn — неотъемлемой части .NET.

Читать далее

infill: бесплатный ассистент в заполнении полей и форм

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

Насколько часто Вы вводите повторяющиеся данные — такие как логин и пароль или установочные скрипты?

Если чаще, чем изредка — то моя бесплатная программа с открытым исходным кодом (win86/GPLv3) раз и навсегда избавит Вас от излишней рутины — добро пожаловать под кат!

Ссылки на скачивание и исходный код

Топ-10 ошибок, найденных в C# проектах за 2024 год

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

В течение 2024 года команда PVS-Studio активно делилась статьями о проверке открытых C# проектов. Мы решили продолжить традицию и отобрали для вас 10 самых интересных ошибок, обнаруженных за этот период. Приятного чтения!

Читать далее

PVS-Studio соответствует требованиям ГОСТ Р 71207—2024 (статический анализ программного обеспечения)

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

ГОСТ Р 71207
Инструментальное средство PVS-Studio разрабатывается с учётом требований, предъявляемых к статическим анализаторам в ГОСТ Р 71207–2024, выявляет критические ошибки и может использоваться при разработке безопасного программного обеспечения. Рассмотрим функциональные возможности, реализованные в PVS-Studio на конец 2024 года в отношении анализа исходного кода программного обеспечения, написанного на компилируемых языках программирования C, C++, C#, Java.

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

Новые диагностические правила в PVS-Studio 7.34

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

С релизом PVS-Studio 7.34 в анализаторе появились новые диагностические правила: taint для Java, множество Unity-диагностик для C#, углубление в OWASP и многое другое! Расскажем о них в этой статье.

Читать далее

Разработка специализированного графика для отображения ЭКГ с использованием Canvas на платформе .NET for Android

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

В современной медицине точное отображение электрокардиограммы (ЭКГ) играет ключевую роль в диагностике и мониторинге сердечно-сосудистых заболеваний. Разработка специализированного графика для визуализации ЭКГ в реальном времени на мобильных устройствах требует не только глубокого понимания медицинских стандартов, но и тщательного выбора технологий для реализации. В статье мы рассмотрим процесс создания такого графика с использованием технологии Canvas, обсудим возникшие проблемы и найденные решения.

Читать далее

Совместить DDD и MVVM: Разработка приложения-трекера расходов по правилу 50-30-20 на .NET MAUI

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

Всем привет! Сегодня я бы хотел рассказать вам про свое приложение Profitocracy, которое помогает мне следить за личными расходами, а также автоматически планировать бюджет на месяц.

Данный проект является open source, так что, если вам интересно сразу перейти к коду, то вы можете ознакомиться с его исходниками на GitHub.

Читать далее

Генерация дашборда по DAX мере через AI DAX движок

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

Привет, Хабр! AI инструменты широко используются в разработке и других сферах, казалось бы, что ещё можно в них улучшить или добавить? Всё зависит от предметной области, в области Business Intelligence при работе с языком запросов DAX актуальными могут быть работа с мерами и создание новых мер. Рутинной задачей при этом является создание схемы данных и заполнение её данными для каждой меры, или можно использовать уже имеющуюся схему, однако при этом при переходе с одной схемы (где выполняются запросы) на другую приходится переименовывать таблицы и столбцы, сопоставлять типы данных и т. д. В связи с этим актуальным может быть инструмент для создания схемы данных для меры «на лету» и выполнения запроса с мерой, т. е. построение запроса и дашборда (концептуально, без форматирования) по мере «на лету».

В dax.do можно строить DAX запрос только для существующих схем, т. е. приходится тратить время на переименование полей и таблиц в DAX запросе при переносе написанного DAX‑запроса из dax.do.

В этой статье рассматривается решение такой проблемы — генерация схемы, связей, запроса и дашборда «на лету» (концептуально, по аналогии с отображением дашборда на основе DAX в dax.do), но только сугубо средствами AI, без реальных DAX движков. Надеюсь, такие инструменты или идеи могут быть полезны аналитикам и разработчикам для повседневной работы, если Вам интересен AI в DAX — добро пожаловать под кат :)

Читать далее

Путь кода VS путь языковых моделей

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

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

Читать далее

Опасность наивности

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

Вопрос на засыпку. Как вы реализуете перемешивание колоды карт?

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

Читать далее

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

Как я СКАДу писал. Часть девятая

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

Доброго времени суток всем!

Вот и настал очередной этап рассказать о моем проекте и куда в итоге он меня привел. Предыдущие мио публикации по данной теме можно найти в моем профиле. С момента последней публикации прошло 7 лет, за это время произошло очень много всего, как вокруг моей разработки, так и того, чему она стала инициатором. После выпуска 2-й версии системы в 2017-м году, она достаточно успешно показала себя в нескольких крупных внедрениях. Объем поддержки и разработки системы ощутимо вырос и стал достаточно много требовать моего личного времени. Кроме того – меня пригласил один крупный холдинг создать им некую отраслевую скада—систему, поэтому времени на свое хобби, в рамках которого так и продолжал развиваться мой проект, стало не очень много. Поэтому в 2020-м году я объявил в кругах АСУТП, что буду не против дать проекту возможность встать на коммерческие рельсы. Неспешно пошли предложения, и также не спешно шел процесс их обсуждений и анализа продукта заинтересованными сторонами. В конечном итоге, на меня вышла группа ИТ-компаний, которые очень заинтересовались продуктом и возможностью диверсифицировать с его помощью бизнес еще и на рынок АСУТП. Так в июле 2022-го года родилась компания-вендор, в основу которой вошла интеллектуальная база проекта с исходным кодом 2-й версии моей разработки. Я вошел в состав ее учредителей и сейчас занимаю должность технического директора компании. За полтора года была сформирована отличная команда: разработчиков, инженеров и менеджеров. Первоочередной задачей, которая была поставлена перед нами – было создание новой версии скады, которая бы удовлетворяла текущим тенденциям и ситуациям, которые происходили в это самое время. А события, как вы понимаете, в этот период сыпались как из рога изобилия, и с каждым из них мы всей командой все больше понимали, что именно сейчас мы делаем то, что нужно нашему рынку автоматизации и это то, что нужно уже сейчас. Насколько у нас это получилось – теперь можно будет оценить, ведь буквально в начале февраля этого года мы выпустили официальный первый релиз нашего нового продукта: SCADA+ 3.0! И выпущен он уже компанией-вендором, которая теперь специализируется на его разработке, поддержке и сопровождении.

Читать далее

Пулы объектов в C#: примеры, устройство и производительность

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

Пул объектов (Object Pool) — это паттерн, который позволяет повторно использовать объекты вместо создания новых. Это может быть полезно в ситуациях, когда инициализация объектов затратна. Паттерн широко применяется в разработке игр и приложениях, где важно минимизировать использование памяти. В этой статье мы рассмотрим, как этот шаблон реализован в C#, и как он может улучшить производительность.

Читать далее

Как решить проблему с программой для измерительного прибора, или «стрельба из микроскопа по воробьям»

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

на КДПВ фотография включенной лампы "полый катод", Hollow cathode lamp, HCL, являющейся источником света для атомно-абсорбционного спектрометра.

Недавно в работе я столкнулся с странной программной ошибкой. Историю диагностики.

Читайте далее

Сколько памяти нужно в 2024 году для выполнения миллиона конкурентных задач?

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

Помните сравнение потребления памяти для асинхронного программирования на популярных языках 2023 года?

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

Давайте снова проведём бенчмарки и изучим результаты!

Читать далее

Как ограничить количество одновременно выполняемых задач в фоне

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

Написание этой статьи навеяно статьёй "Task изнутри: управление потоками в .NET и создание своих планировщиков". Одна из проблем озвученная в данной статье это ограничение числа одновременно выполняемых задач.
В указанной статье для таких целей использовался кастомный планировщик. Полагаю многим пришла в голову мысль о возможности создании решения на основе SemaphoreSlim, а я же решил его воплотить и проверить насколько проще такое решение, чем кастомный планировщик.

Читать далее

Что нужно знать при написании алгоритмов на .NET

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

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

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

Краткое содержание:

1. Нотация О большое для оценки сложности алгоритмов

2. Структуры данных и их применение в алгоритмах

3. Некоторые рекомендации для разработки на .NET

Читать далее

Python vs C#, Django vs ASP: проблема выбора

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

Наверное я один из немногих, которые желают опубликовать материал не просто, чтобы было, или чтобы высказать свое «авторитетное» мнение по тем или иным вопросам, а чтобы получить обратную связь. И за эту самую связь в комментариях я был бы весьма признателен!

Читать далее

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