⚡ C# полезный совет
Хотите ускорить работу со строками, когда нужно часто их конкатенировать?
Не используйте обычный
Вместо этого применяйте `StringBuilder`:
📌 Что это даёт:
- StringBuilder не создаёт новую строку при каждой операции
- Сильно экономит память и ускоряет код в циклах
- Особенно полезно при работе с большими логами или генерацией отчётов
Хотите ускорить работу со строками, когда нужно часто их конкатенировать?
Не используйте обычный
+
в цикле — это создаёт лишние объекты в памяти. Вместо этого применяйте `StringBuilder`:
using System.Text;
var sb = new StringBuilder();
for (int i = 0; i < 1000; i++)
{
sb.Append("строка ").Append(i).AppendLine();
}
string result = sb.ToString();
Console.WriteLine(result);
📌 Что это даёт:
- StringBuilder не создаёт новую строку при каждой операции
- Сильно экономит память и ускоряет код в циклах
- Особенно полезно при работе с большими логами или генерацией отчётов
⚡ .NET Aspire позволяет запускать фронтенд прямо из Vite
В Community Toolkit появился пакет `Aspire.Hosting.NodeJS.Extensions`, который позволяет интегрировать Node.js-приложения в .NET Aspire.
🔥 Что он даёт:
- Запуск Vite-приложений напрямую из Aspire.
- Поддержка npm, Yarn и pnpm — выбирай свой пакетный менеджер.
- Автоустановка зависимостей перед стартом (`WithNpmPackageInstallation()`,
- Лёгкая интеграция фронтенда и бэкенда: всё управляется из одного места.
📌 Пример кода:
💡 Итог: теперь запуск React/Vue/Angular через Vite можно встроить прямо в Aspire, без лишних шагов и костылей.
📌 Подробнее
#dotnet #Aspire #NodeJS #Vite #Frontend
В Community Toolkit появился пакет `Aspire.Hosting.NodeJS.Extensions`, который позволяет интегрировать Node.js-приложения в .NET Aspire.
🔥 Что он даёт:
- Запуск Vite-приложений напрямую из Aspire.
- Поддержка npm, Yarn и pnpm — выбирай свой пакетный менеджер.
- Автоустановка зависимостей перед стартом (`WithNpmPackageInstallation()`,
WithYarnPackageInstallation()
, `WithPnpmPackageInstallation()`). - Лёгкая интеграция фронтенда и бэкенда: всё управляется из одного места.
📌 Пример кода:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddViteApp("vite-demo")
.WithExternalHttpEndpoints();
builder.AddViteApp("yarn-demo", packageManager: "yarn")
.WithExternalHttpEndpoints();
builder.AddViteApp("pnpm-demo", packageManager: "pnpm")
.WithExternalHttpEndpoints();
builder.Build().Run();
💡 Итог: теперь запуск React/Vue/Angular через Vite можно встроить прямо в Aspire, без лишних шагов и костылей.
📌 Подробнее
#dotnet #Aspire #NodeJS #Vite #Frontend
📌 Что это такое
- Приложение-пример на .NET, которое реализует веб-сайт электронной коммерции (eCommerce) с архитектурой, основанной на сервисах.
- Использует .NET 9.
- Код лицензирован по MIT.
📌 Как запустить
- Клонировать репозиторий.
- Установить .NET 9 SDK.
- Для Windows: можно использовать Visual Studio (2022 17.10+).
- Можно запустить через Docker Desktop.
- Через терминал:
```bash
dotnet run --project src/eShop.AppHost/eShop.AppHost.csproj
📌 Особенности
Пример данных каталога хранится в catalog.json, описания продуктов и брендов — вымышленные.
Изображения продуктов сгенерированы с помощью DALL·E 3.
Есть версия приложения, подготовленная для деплоя в Azure.
📌 Почему полезно
- Подходит как учебный материал для изучения структуры реального .NET-приложения.
- Демонстрирует современные практики: архитектура, CI/CD, микросервисы.
- Можно использовать как стартовую точку для собственных проектов.
#dotnet #eCommerce #ReferenceApp #MIT #Architecture #SampleProject #Microservices
Репозиторий: https://github.com/dotnet/eShop
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥 Лучшая фича C# за последние годы? Pattern Matching
Зачем он нужен:
Pattern matching позволяет элегантно проверять объект на определённые свойства:
- ✅ Является
- ✅ Является объектом конкретного типа
- ✅ Имеет свойство с определённым значением
В связке со switch-выражениями и record-типами это превращает код в лаконичный и выразительный.
📌 Пример:
Зачем он нужен:
Pattern matching позволяет элегантно проверять объект на определённые свойства:
- ✅ Является
null
или не null
- ✅ Является объектом конкретного типа
- ✅ Имеет свойство с определённым значением
В связке со switch-выражениями и record-типами это превращает код в лаконичный и выразительный.
📌 Пример:
static string PrintShape(object shape) =>
shape switch
{
null => "Нет объекта",
Circle c => $"Круг с радиусом {c.Radius}",
Rectangle { Width: > 0, Height: > 0 } r => $"Прямоугольник {r.Width}x{r.Height}",
_ => "Неизвестная фигура"
};
В .NET 8 и выше есть библиотеки от Microsoft и обновлённый API Polly — популярной библиотеки для повышения надёжности и обработки сбоев.
С Polly можно легко настроить стратегии:
- повтор запросов (Retry)
- резервные сценарии (Fallback)
- ограничение времени (Timeout)
- контроль частоты (Rate-limiting)
- автоматическое отключение при сбоях (Circuit breaker)
Эти механизмы помогают облачным приложениям оставаться живыми даже в условиях ошибок и перегрузок.
Подробный разбор тут
Please open Telegram to view this post
VIEW IN TELEGRAM
@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
Что мне нравится в **.NET Aspire** 👇
👉 С ним невероятно просто запускать полезные сервисы. Всего в несколько строк кода можно поднять:
- базу данных
- Redis
- LLM
- reverse proxy
- message broker
Можно даже масштабировать сервисы, чтобы проверить сценарии с конкурентной нагрузкой.
Если вы ещё не пробовали построить своё первое Aspire-приложение — у меня есть подробный гайд о том, как я мигрировал свой .NET проект в Aspire.
🟠 Читать здесь: https://milanjovanovic.tech/blog/dotnet-aspire-a-game-changer-for-cloud-native-development
👉 С ним невероятно просто запускать полезные сервисы. Всего в несколько строк кода можно поднять:
- базу данных
- Redis
- LLM
- reverse proxy
- message broker
Можно даже масштабировать сервисы, чтобы проверить сценарии с конкурентной нагрузкой.
Если вы ещё не пробовали построить своё первое Aspire-приложение — у меня есть подробный гайд о том, как я мигрировал свой .NET проект в Aspire.
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡ .NET Channel Publisher — простой способ строить настоящий async messaging
📌 Как это работает:
- Использует
- Сообщения пишутся в канал и обрабатываются в фоне, не блокируя поток
- Поддержка
🔥 Плюсы:
- Минимум кода — максимум гибкости
- Высокая производительность и низкая задержка
- Удобно для event-driven архитектуры и микросервисов
На скриншоте:
- Пример класса
- Трейсинг вызова
#dotnet #csharp #async #messaging
📌 Как это работает:
- Использует
System.Threading.Channels
для асинхронной публикации событий - Сообщения пишутся в канал и обрабатываются в фоне, не блокируя поток
- Поддержка
CancellationToken
для безопасной отмены 🔥 Плюсы:
- Минимум кода — максимум гибкости
- Высокая производительность и низкая задержка
- Удобно для event-driven архитектуры и микросервисов
На скриншоте:
- Пример класса
ChannelPublisher
для отправки нотификаций - Трейсинг вызова
Order.Service: POST orders
показывает прозрачную обработку и асинхронность #dotnet #csharp #async #messaging