Оптимизация CPU в C#: алгоритмы, параллелизм и советы для Unity
В статье разбирают выбор эффективных алгоритмов поиска и сортировок, оптимизации циклов, безопасное распараллеливание, кэширование и практические приёмы для Unity — пулы, LOD, минимизация аллокаций и рекомендации по профайлингу.
Читать подробнее: https://habr.com/ru/articles/976414/
#ru
@dot_net_c_sharp | Другие наши каналы
В статье разбирают выбор эффективных алгоритмов поиска и сортировок, оптимизации циклов, безопасное распараллеливание, кэширование и практические приёмы для Unity — пулы, LOD, минимизация аллокаций и рекомендации по профайлингу.
Читать подробнее: https://habr.com/ru/articles/976414/
#ru
@dot_net_c_sharp | Другие наши каналы
Как сэкономить память в C# и Unity: ключевые приёмы
В статье объясняют работу сборщика, отличие управляемой/неуправляемой памяти, когда выбирать struct вместо class, тесты производительности, предотвращение утечек, StringBuilder, пулы, профайлинг и оптимизация ресурсов для игр.
Читать подробнее: https://habr.com/ru/articles/976424/
#ru
@dot_net_c_sharp | Другие наши каналы
В статье объясняют работу сборщика, отличие управляемой/неуправляемой памяти, когда выбирать struct вместо class, тесты производительности, предотвращение утечек, StringBuilder, пулы, профайлинг и оптимизация ресурсов для игр.
Читать подробнее: https://habr.com/ru/articles/976424/
#ru
@dot_net_c_sharp | Другие наши каналы
👎1
Опасности unsafe в C#
В статье описаны риски unsafe в .NET: перемещение GC и висячие указатели, повреждение кучи, нарушение атомарности и ошибки при (де)сериализации. Советуют fixed/GCHandle, Span, SafeHandle, GC.KeepAlive и репортить баги в dotnet/runtime.
Читать подробнее: https://habr.com/ru/articles/976636/
#ru
@dot_net_c_sharp | Другие наши каналы
В статье описаны риски unsafe в .NET: перемещение GC и висячие указатели, повреждение кучи, нарушение атомарности и ошибки при (де)сериализации. Советуют fixed/GCHandle, Span, SafeHandle, GC.KeepAlive и репортить баги в dotnet/runtime.
Читать подробнее: https://habr.com/ru/articles/976636/
#ru
@dot_net_c_sharp | Другие наши каналы
❤4
Как сделать iOS‑виджет на .NET MAUI
В статье Toine de Boer подробно объясняет, как создать iOS‑виджет с .NET MAUI: настройка Bundle ID и App Groups, работа в Xcode/Swift, иконки, сборка .appex и интеграция в MAUI‑приложение, а также обмен данными между приложением и виджетом. Как связать .NET MAUI и iOS Widget — кратко
В статье: настройка App Groups (Entitlements.plist) и Preferences с sharedName для общего хранилища, указание appex в .csproj, обновления через WidgetKit (прокси), коммуникация через AppIntents или widgetUrl. Совет: VS Code+Copilot и Xcode Preview.
Подробности: https://devblogs.microsoft.com/dotnet/how-to-build-ios-widgets-with-dotnet-maui/
#en
@dot_net_c_sharp | Другие наши каналы
В статье Toine de Boer подробно объясняет, как создать iOS‑виджет с .NET MAUI: настройка Bundle ID и App Groups, работа в Xcode/Swift, иконки, сборка .appex и интеграция в MAUI‑приложение, а также обмен данными между приложением и виджетом. Как связать .NET MAUI и iOS Widget — кратко
В статье: настройка App Groups (Entitlements.plist) и Preferences с sharedName для общего хранилища, указание appex в .csproj, обновления через WidgetKit (прокси), коммуникация через AppIntents или widgetUrl. Совет: VS Code+Copilot и Xcode Preview.
Подробности: https://devblogs.microsoft.com/dotnet/how-to-build-ios-widgets-with-dotnet-maui/
#en
@dot_net_c_sharp | Другие наши каналы
❤1
ReadyToRun в .NET: когда оправдана предкомпиляция
Статья объясняет, как R2R/Crossgen2 даёт AOT‑код и ускоряет холодный старт, но увеличивает размер сборок и может замедлить long‑running сценарии. Разбирают Composite R2R, статический PGO, кейсы (serverless, CLI, UI) и онлайн‑урок 18 декабря.
Читать подробнее: https://habr.com/ru/companies/otus/articles/977080/
#ru
@dot_net_c_sharp | Другие наши каналы
Статья объясняет, как R2R/Crossgen2 даёт AOT‑код и ускоряет холодный старт, но увеличивает размер сборок и может замедлить long‑running сценарии. Разбирают Composite R2R, статический PGO, кейсы (serverless, CLI, UI) и онлайн‑урок 18 декабря.
Читать подробнее: https://habr.com/ru/companies/otus/articles/977080/
#ru
@dot_net_c_sharp | Другие наши каналы
✍1👍1
Azure DevOps теперь полноценно поддерживает Microsoft.Testing.Platform
Microsoft объявила интеграцию: запуск тестов через DotNetCoreCLI (или dotnet test) с флагом --report-trx, а публикация TRX теперь учитывает повторные попытки и корректно группирует результаты. Включите AllowPtrToDetectTestRunRetryFiles: true и --retry-failed-tests.
Подробности: https://devblogs.microsoft.com/dotnet/microsoft-testing-platform-azure-retry/
#en
@dot_net_c_sharp | Другие наши каналы
Microsoft объявила интеграцию: запуск тестов через DotNetCoreCLI (или dotnet test) с флагом --report-trx, а публикация TRX теперь учитывает повторные попытки и корректно группирует результаты. Включите AllowPtrToDetectTestRunRetryFiles: true и --retry-failed-tests.
Подробности: https://devblogs.microsoft.com/dotnet/microsoft-testing-platform-azure-retry/
#en
@dot_net_c_sharp | Другие наши каналы
Как сделать await для любого типа
Статья на Хабре показывает, как реализовать собственный awaitable: определить GetAwaiter(), awaiter с IsCompleted, OnCompleted и GetResult(). В примере DelayAwaitable даёт задержку без Task и ведёт себя как Task.Delay, но для произвольных событий. Как создать собственный await в C# — простая реализация
В статье показано, как реализовать await/awaiter через GetAwaiter(), IsCompleted, OnCompleted и GetResult(). Приведены примеры с таймером и ожиданием события (ManualResetEvent) и объясняется, когда полезно делать свой await вместо Task/ValueTask.
Читать подробнее: https://habr.com/ru/companies/otus/articles/977074/
#ru
@dot_net_c_sharp | Другие наши каналы
Статья на Хабре показывает, как реализовать собственный awaitable: определить GetAwaiter(), awaiter с IsCompleted, OnCompleted и GetResult(). В примере DelayAwaitable даёт задержку без Task и ведёт себя как Task.Delay, но для произвольных событий. Как создать собственный await в C# — простая реализация
В статье показано, как реализовать await/awaiter через GetAwaiter(), IsCompleted, OnCompleted и GetResult(). Приведены примеры с таймером и ожиданием события (ManualResetEvent) и объясняется, когда полезно делать свой await вместо Task/ValueTask.
Читать подробнее: https://habr.com/ru/companies/otus/articles/977074/
#ru
@dot_net_c_sharp | Другие наши каналы
Давка кэша в C#: почему ConcurrentDictionary и MemoryCache не спасают
В статье показано, как cache stampede приводит к многократным тяжёлым запросам, приведены бенчмарки для IO/CPU-bound задач и сравнение с HybridCache, а также предложены подходы для защиты кэша. Давка кэша в .NET: чем опасны ConcurrentDictionary и MemoryCache
В статье показано, что GetOrAdd и GetOrCreateAsync не гарантируют единичный вызов тяжёлой операции; HybridCache защищает внутри процесса, но не между репликами. Практические рекомендации по выбору и обходам проблемы. Как уменьшить давку кэша: джиттер TTL и Single Flight
В статье предлагают добавлять случайный джиттер к TTL (FusionCache поддерживает это) и применять паттерн Single Flight на уровне L2, чтобы только одна реплика обновляла тяжёлые данные. Автор не нашёл готовых библиотек.
Читать подробнее: https://habr.com/ru/articles/977498/
#ru
@dot_net_c_sharp | Другие наши каналы
В статье показано, как cache stampede приводит к многократным тяжёлым запросам, приведены бенчмарки для IO/CPU-bound задач и сравнение с HybridCache, а также предложены подходы для защиты кэша. Давка кэша в .NET: чем опасны ConcurrentDictionary и MemoryCache
В статье показано, что GetOrAdd и GetOrCreateAsync не гарантируют единичный вызов тяжёлой операции; HybridCache защищает внутри процесса, но не между репликами. Практические рекомендации по выбору и обходам проблемы. Как уменьшить давку кэша: джиттер TTL и Single Flight
В статье предлагают добавлять случайный джиттер к TTL (FusionCache поддерживает это) и применять паттерн Single Flight на уровне L2, чтобы только одна реплика обновляла тяжёлые данные. Автор не нашёл готовых библиотек.
Читать подробнее: https://habr.com/ru/articles/977498/
#ru
@dot_net_c_sharp | Другие наши каналы
Как Dodo Brands перешли от Google Таблиц к собственной HR‑платформе
В статье рассказывается, как из‑за лимитов и сбоев Google‑таблиц в 2022 началась миграция: сравнили покупные решения и разработку, выбрали собственную платформу на PostgreSQL, запустили во II кв. 2023 и автоматизировали оценку, зарплаты и HR‑процессы.
Читать подробнее: https://habr.com/ru/companies/dododev/articles/968050/
#ru
@dot_net_c_sharp | Другие наши каналы
В статье рассказывается, как из‑за лимитов и сбоев Google‑таблиц в 2022 началась миграция: сравнили покупные решения и разработку, выбрали собственную платформу на PostgreSQL, запустили во II кв. 2023 и автоматизировали оценку, зарплаты и HR‑процессы.
Читать подробнее: https://habr.com/ru/companies/dododev/articles/968050/
#ru
@dot_net_c_sharp | Другие наши каналы
Как найти госзаказы с помощью MSSQL 2025 и векторного поиска
Автор описывает систему: Vector в MSSQL, модель ai-forever/ru-en-RoSBERTa, Python+RabbitMQ и .NET Core для индексации закупок, сравнения с профилем и анализа документов через pandoc и LLM. Демо: artemtender.ru Госпортал не нашёлся — доработка под 1C/Касперский/АстраЛинукс
В статье автор рассказывает, что вместо областного портала попались проекты под конкретных исполнителей — правки проприетарных решений. Это может быть интересно профильным поставщикам; автор делится опытом.
Читать подробнее: https://habr.com/ru/articles/978104/
#ru
@dot_net_c_sharp | Другие наши каналы
Автор описывает систему: Vector в MSSQL, модель ai-forever/ru-en-RoSBERTa, Python+RabbitMQ и .NET Core для индексации закупок, сравнения с профилем и анализа документов через pandoc и LLM. Демо: artemtender.ru Госпортал не нашёлся — доработка под 1C/Касперский/АстраЛинукс
В статье автор рассказывает, что вместо областного портала попались проекты под конкретных исполнителей — правки проприетарных решений. Это может быть интересно профильным поставщикам; автор делится опытом.
Читать подробнее: https://habr.com/ru/articles/978104/
#ru
@dot_net_c_sharp | Другие наши каналы
Bulkhead в .NET — защита ресурсов
В статье разобран Bulkhead‑паттерн: изоляция групп запросов, чтобы сбой или перегрузка в одной части не вывели из строя всю систему. Приведены реализации через SemaphoreSlim и Polly.BulkheadAsync с лимитами и очередью, и практические советы. Bulkhead в .NET — как защитить сервисы от перегрузок
В статье показано, как через семафоры, ConcurrentExclusiveSchedulerPair и Polly BulkheadAsync (пример: 5 одновременных + очередь) ограничивать вызовы и в связке с Circuit Breaker/Retry не дать одному тяжёлому участку парализовать систему.
Читать подробнее: https://habr.com/ru/companies/otus/articles/977078/
#ru
@dot_net_c_sharp | Другие наши каналы
В статье разобран Bulkhead‑паттерн: изоляция групп запросов, чтобы сбой или перегрузка в одной части не вывели из строя всю систему. Приведены реализации через SemaphoreSlim и Polly.BulkheadAsync с лимитами и очередью, и практические советы. Bulkhead в .NET — как защитить сервисы от перегрузок
В статье показано, как через семафоры, ConcurrentExclusiveSchedulerPair и Polly BulkheadAsync (пример: 5 одновременных + очередь) ограничивать вызовы и в связке с Circuit Breaker/Retry не дать одному тяжёлому участку парализовать систему.
Читать подробнее: https://habr.com/ru/companies/otus/articles/977078/
#ru
@dot_net_c_sharp | Другие наши каналы
Как оценивают ремонт нейросетью
В статье автор описывает сбор датасета, обучение трёх моделей (детектор, фильтр, регрессор), интеграцию с краулером и Telegram‑ботом, тесты локальных LLM и подбор лучшей модели qwen2.5vl:7b.
Читать подробнее: https://habr.com/ru/articles/978916/
#ru
@dot_net_c_sharp | Другие наши каналы
В статье автор описывает сбор датасета, обучение трёх моделей (детектор, фильтр, регрессор), интеграцию с краулером и Telegram‑ботом, тесты локальных LLM и подбор лучшей модели qwen2.5vl:7b.
Читать подробнее: https://habr.com/ru/articles/978916/
#ru
@dot_net_c_sharp | Другие наши каналы
Brotli и Zlib в .NET: избегаем лишних аллокаций
В статье рассказывается, что BrotliStream удобен для файлов, но при работе с памятью или по сети приводит к лишним аллокациям. Есть низкоуровневые BrotliEncoder/BrotliDecoder на Span<t для работы без GC. Также описана приватная реализация Zlib в рантайме .NET. Нативный Zlib/GZip API для .NET — готовый код и бенчмарки
Обзор: автор адаптировал ZlibEncoder/ZlibDecoder через System.IO.Compression.Native (P/Invoke) и показал альтернативу на ICSharpCode.SharpZipLib. В статье есть гисты, примеры использования и подробные бенчмарки Brotli, Zlib и GZip.
Читать подробнее: https://habr.com/ru/articles/979400/
#ru @dot_net_c_sharp | Другие наши каналы
В статье рассказывается, что BrotliStream удобен для файлов, но при работе с памятью или по сети приводит к лишним аллокациям. Есть низкоуровневые BrotliEncoder/BrotliDecoder на Span<t для работы без GC. Также описана приватная реализация Zlib в рантайме .NET. Нативный Zlib/GZip API для .NET — готовый код и бенчмарки
Обзор: автор адаптировал ZlibEncoder/ZlibDecoder через System.IO.Compression.Native (P/Invoke) и показал альтернативу на ICSharpCode.SharpZipLib. В статье есть гисты, примеры использования и подробные бенчмарки Brotli, Zlib и GZip.
Читать подробнее: https://habr.com/ru/articles/979400/
#ru @dot_net_c_sharp | Другие наши каналы
✍1
dynamic в C# — мощный, но специализированный инструмент
В статье объясняется, как ключевое слово dynamic из C# 4.0 упрощает работу с COM, JSON и DLR, экономя код, но перенося проверку типов в runtime и уступая по скорости статическим вызовам из‑за механизма CallSite. Dynamic в C#: когда он вреден для производительности и надёжности
В статье автор показывает, что dynamic может давать до ~18× падения скорости, приводить к Runtime‑ошибкам, усложнять рефакторинг и распространяться по коду. Рекомендации: предпочитать статические типы, изолировать и профилировать использование dynamic. Граница удобства и ответственного дизайна в C#
В статье рассказывается о пути от основ C# и .NET до асинхронности, управления памятью и командной разработки с акцентом на типобезопасный, осознанный код. Бесплатные демо: 25 дек — Telegram API; 14 янв — LINQ; 22 янв — сетевой чат на C#.
Читать подробнее: https://habr.com/ru/companies/otus/articles/978302/
#ru
@dot_net_c_sharp | Другие наши каналы
В статье объясняется, как ключевое слово dynamic из C# 4.0 упрощает работу с COM, JSON и DLR, экономя код, но перенося проверку типов в runtime и уступая по скорости статическим вызовам из‑за механизма CallSite. Dynamic в C#: когда он вреден для производительности и надёжности
В статье автор показывает, что dynamic может давать до ~18× падения скорости, приводить к Runtime‑ошибкам, усложнять рефакторинг и распространяться по коду. Рекомендации: предпочитать статические типы, изолировать и профилировать использование dynamic. Граница удобства и ответственного дизайна в C#
В статье рассказывается о пути от основ C# и .NET до асинхронности, управления памятью и командной разработки с акцентом на типобезопасный, осознанный код. Бесплатные демо: 25 дек — Telegram API; 14 янв — LINQ; 22 янв — сетевой чат на C#.
Читать подробнее: https://habr.com/ru/companies/otus/articles/978302/
#ru
@dot_net_c_sharp | Другие наши каналы
❤2
Не знаете, в чём встречать Новый год? Не беда
Мы как раз собрали стек новогодних нарядов, чтобы вы могли сиять ярче, чем любая гирлянда. Скорее заходите в нашу примерочную и выбирайте скин!
Реклама
Мы как раз собрали стек новогодних нарядов, чтобы вы могли сиять ярче, чем любая гирлянда. Скорее заходите в нашу примерочную и выбирайте скин!
Реклама
Space Pirates: LuckyStrike и PhantomCloud
В статье описано, как LuckyStrike использует Yandex Cloud как C2, а PhantomCloud — .NET‑бэкдор в Veeam.Guest.Interactions.exe, общающийся через OneDrive/Dropbox; приведены детали шифрования (AES/PBKDF2), обходы AMSI/ETW, IOCs и YARA‑правило.
Читать подробнее: https://habr.com/ru/articles/980830/
#ru
@dot_net_c_sharp | Другие наши каналы
В статье описано, как LuckyStrike использует Yandex Cloud как C2, а PhantomCloud — .NET‑бэкдор в Veeam.Guest.Interactions.exe, общающийся через OneDrive/Dropbox; приведены детали шифрования (AES/PBKDF2), обходы AMSI/ETW, IOCs и YARA‑правило.
Читать подробнее: https://habr.com/ru/articles/980830/
#ru
@dot_net_c_sharp | Другие наши каналы
Lazy<t в DI .NET: ускоряем старт и экономим память
В статье объясняется, что DI по умолчанию резолвит всё дерево зависимостей, замедляя старт и увеличивая расход памяти. Автор предлагает использовать Lazy<t для ленивой инициализации тяжёлых или опциональных сервисов и предупреждает о разнице с Func<t и нюансах lifetime. Lazy<t в DI: просто, эффективно
В статье объясняют: Lazy<t помогает оптимизировать внедрение зависимостей, работает из коробки с Microsoft DI; для Autofac/Unity доступен LazyProxy. Вызов .Value обычно не заметен, но в критичных алгоритмах оцените затраты. Код — на GitHub.
Читать подробнее: https://habr.com/ru/articles/981308/
#ru @dot_net_c_sharp | Другие наши каналы
В статье объясняется, что DI по умолчанию резолвит всё дерево зависимостей, замедляя старт и увеличивая расход памяти. Автор предлагает использовать Lazy<t для ленивой инициализации тяжёлых или опциональных сервисов и предупреждает о разнице с Func<t и нюансах lifetime. Lazy<t в DI: просто, эффективно
В статье объясняют: Lazy<t помогает оптимизировать внедрение зависимостей, работает из коробки с Microsoft DI; для Autofac/Unity доступен LazyProxy. Вызов .Value обычно не заметен, но в критичных алгоритмах оцените затраты. Код — на GitHub.
Читать подробнее: https://habr.com/ru/articles/981308/
#ru @dot_net_c_sharp | Другие наши каналы
✍1
Айти на заводе: режим, дефицит и стабильность
В статье на Habr программист ОСК описывает закрытые контуры, запрет удалёнки и смартфонов, отсутствие интернета и современных инструментов, отток IT‑кадров из‑за низких зарплат и одновременно стабильную оплату, соцгарантии и признание коллектива. Читайте источник.
Читать подробнее: https://habr.com/ru/articles/981314/
#ru
@dot_net_c_sharp | Другие наши каналы
В статье на Habr программист ОСК описывает закрытые контуры, запрет удалёнки и смартфонов, отсутствие интернета и современных инструментов, отток IT‑кадров из‑за низких зарплат и одновременно стабильную оплату, соцгарантии и признание коллектива. Читайте источник.
Читать подробнее: https://habr.com/ru/articles/981314/
#ru
@dot_net_c_sharp | Другие наши каналы
🎉1💯1
Топ‑10 любопытных ошибок в C#: разбор PVS‑Studio
PVS‑Studio показывает частые баги в открытых .NET‑проектах: copy‑paste (ToInt64/ToUInt64), некорректный AppendFormat, рассинхрон Equals/GetHashCode, ReferenceEquals для структур, ловушки LINQ и V3219 (захват переменной). Полезно для разработчиков.
Читать подробнее: https://habr.com/ru/companies/pvs-studio/articles/981462/
#ru
@dot_net_c_sharp | Другие наши каналы
PVS‑Studio показывает частые баги в открытых .NET‑проектах: copy‑paste (ToInt64/ToUInt64), некорректный AppendFormat, рассинхрон Equals/GetHashCode, ReferenceEquals для структур, ловушки LINQ и V3219 (захват переменной). Полезно для разработчиков.
Читать подробнее: https://habr.com/ru/companies/pvs-studio/articles/981462/
#ru
@dot_net_c_sharp | Другие наши каналы
Что ждать от .NET 11 и C# 15
В статье обзор ожидаемых фич: runtime async (легковесные асинхронные задачи при сохранённом async/await), union types, улучшенная рефлексия для AOT и поддержка хвостовой рекурсии. Приведены ссылки на обсуждения. Застопорившееся обсуждение: обновления прекратились в январе
В статье отмечается, что последнее обновление в обсуждении датировано началом января; дальнейших правок или комментариев не было, тема остаётся без движения.
Читать подробнее: https://habr.com/ru/articles/981476/
#ru
@dot_net_c_sharp | Другие наши каналы
В статье обзор ожидаемых фич: runtime async (легковесные асинхронные задачи при сохранённом async/await), union types, улучшенная рефлексия для AOT и поддержка хвостовой рекурсии. Приведены ссылки на обсуждения. Застопорившееся обсуждение: обновления прекратились в январе
В статье отмечается, что последнее обновление в обсуждении датировано началом января; дальнейших правок или комментариев не было, тема остаётся без движения.
Читать подробнее: https://habr.com/ru/articles/981476/
#ru
@dot_net_c_sharp | Другие наши каналы
❤1👍1
Ташкент в «кастрюле» смога: как получать оповещения
Житель Ташкента объясняет причины резких перепадов AQI, делится «таблицей выживания» по уровням загрязнения и описывает открытую C# библиотеку, интегрирующуюся с IQAir для автоматических уведомлений. Как сделать Telegram-бота для уведомлений о качестве воздуха
В статье автор показывает путь от консольного опроса API к отказоустойчивому Telegram-боту с настраиваемыми URL, расширяемым HttpClient и автоматическими повторами при сбоях. Отмечены бесплатные API, GitHub Actions и просьба о фидбэке.
Читать подробнее: https://habr.com/ru/articles/981440/
#ru
@dot_net_c_sharp | Другие наши каналы
Житель Ташкента объясняет причины резких перепадов AQI, делится «таблицей выживания» по уровням загрязнения и описывает открытую C# библиотеку, интегрирующуюся с IQAir для автоматических уведомлений. Как сделать Telegram-бота для уведомлений о качестве воздуха
В статье автор показывает путь от консольного опроса API к отказоустойчивому Telegram-боту с настраиваемыми URL, расширяемым HttpClient и автоматическими повторами при сбоях. Отмечены бесплатные API, GitHub Actions и просьба о фидбэке.
Читать подробнее: https://habr.com/ru/articles/981440/
#ru
@dot_net_c_sharp | Другие наши каналы
👍1