В прошлый раз говорили про деконструкцию и производительность.
ValueTuple хорошо ложится в методы, паттерны и цепочкиЧто важно знать:
• Упрощает возврат значений;
• Работает с LINQ;
• Имеет имена полей.
Это помогает возвращать сразу несколько значений — без классов, аллокаций и Item1.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥21👍11🤝7❤3
C# Ready | Unity pinned «👋🏼 Приветствую в C# Ready! C# — современный, мощный и элегантный язык программирования от Microsoft. Он объединяет в себе простоту, безопасность и гибкость, позволяя создавать всё. Это авторский ✈️ канал, который поможет вам изучить C# с нуля и глубже понять…»
ValueTask vs Task — когда можно обойтись без лишних аллокаций!
Иногда асинхронный метод чаще всего завершается синхронно, а возвращая
Если кэш почти всегда заполнен, каждый вызов создаёт лишний
При
При «промахе» возвращаем
🔥 Использование
➡️ C# Ready | #практика
Иногда асинхронный метод чаще всего завершается синхронно, а возвращая
Task, мы платим за каждую аллокацию объекта-представителя:// «До»: всегда возвращаем Task, даже если результат готов сразу
public async Task<int> GetCountAsync()
{
if (cache.TryGetValue("count", out var value))
return value;
var fresh = await LoadCountFromDbAsync();
cache["count"] = fresh;
return fresh;
}
Если кэш почти всегда заполнен, каждый вызов создаёт лишний
Task-объект:// «После»: возвращаем ValueTask при готовом результате
public ValueTask<int> GetCountAsync()
{
if (cache.TryGetValue("count", out var value))
return new ValueTask<int>(value); // без аллокации state-machine
return new ValueTask<int>(LoadCountFromDbAsync());
}
При
cache hit мы сразу упаковываем значение в ValueTask<int>, не создавая асинхронной машины состояний.При «промахе» возвращаем
ValueTask, обёрнутый вокруг реального Task.🔥 Использование
ValueTask там, где результат часто готов сразу, сокращает количество выделений в куче и снижает нагрузку сборщика мусора.Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤6🔥3
Кратко сравниваем задачи C# и корутины Unity, показывая, где каждая техника эффективнее в реальных сценариях.
Что важно знать:
• Ошибки ловятся сразу;
• Отмена делается просто;
• Изображение остаётся плавным.
Совмещая задачи и корутины, ты получишь чистый код и устойчивую производительность во всех игровых ситуациях.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥27👍6❤4🤝3
Параллельная обработка коллекции через Parallel.ForEach!
Когда нужно быстро выполнить CPU-интенсивную работу над большим набором данных, можно распараллелить обработку без сложной ручной работы с потоками:
Вызовем
🔥 Совет: поэкспериментируйте с
➡️ C# Ready | #практика
Когда нужно быстро выполнить CPU-интенсивную работу над большим набором данных, можно распараллелить обработку без сложной ручной работы с потоками:
// Исходная коллекция—скажем, список чисел
var numbers = new int[1_000_000];
new Random().NextBytes(new Span<byte>(new byte[0])); // просто для примера
for (int i = 0; i < numbers.Length; i++)
numbers[i] = i;
Вызовем
Parallel.ForEach, соберём результаты в потокобезопасную коллекцию и зададим максимальное число параллельных задач:var results = new ConcurrentBag<int>();
var options = new ParallelOptions { MaxDegreeOfParallelism = Environment.ProcessorCount };
Parallel.ForEach(numbers, options, number =>
{
// эмуляция тяжёлой работы
int squared = number * number;
results.Add(squared);
});
ConcurrentBag<T> гарантирует, что в него можно безопасно записывать из разных потоков без блокировок:Console.WriteLine($"Обработано элементов: {results.Count}");
Console.WriteLine($"Первый результат: {results.Min()} | Последний: {results.Max()}");🔥 Совет: поэкспериментируйте с
MaxDegreeOfParallelism — на некоторых задачах меньшее число потоков даёт лучшее быстродействие за счёт меньшего оверхеда переключений.Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥4❤1
С помощью пары методов перенесите любой файл на диск, получив мгновенную ссылку для удобного просмотра.
Что важно знать:
• Файл доступа рядом;
• Доступ только нужный;
• Большие файлы делим.
Автоматизируйте рутину и делитесь ссылками моментально, экономя время коллег и клиентов при повторных операциях загрузки.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤12🔥6👍4😁2👎1
Отслеживаем изменения в папке через FileSystemWatcher — мгновенный отклик без опроса!
Иногда нужно сразу реагировать, когда в каталоге появляется новый файл отчёта или изменяется конфигурация. Вместо бесконечных таймеров используем встроенный наблюдатель файловой системы.
Сначала задаём путь и настраиваем watcher: реагируем на создание и изменение только
Обработчик получает данные об изменении и выводит краткую информацию:
Чтобы консольное приложение не завершилось раньше времени, просто ждём клавишу:
🔥
➡️ C# Ready | #практика
Иногда нужно сразу реагировать, когда в каталоге появляется новый файл отчёта или изменяется конфигурация. Вместо бесконечных таймеров используем встроенный наблюдатель файловой системы.
Сначала задаём путь и настраиваем watcher: реагируем на создание и изменение только
.txt-файлов, подписываемся на события Created и Changed:using System.IO;
string path = @"C:\Watched";
using var watcher = new FileSystemWatcher(path, "*.txt")
{
NotifyFilter = NotifyFilters.FileName | NotifyFilters.LastWrite,
IncludeSubdirectories = false,
// или true — если нужны подпапки
EnableRaisingEvents = true
// запускаем слежение
};
watcher.Created += OnChanged;
watcher.Changed += OnChanged;
Обработчик получает данные об изменении и выводит краткую информацию:
static void OnChanged(object sender, FileSystemEventArgs e)
{
Console.WriteLine($"[{DateTime.Now:HH:mm:ss}] {e.ChangeType}: {e.FullPath}");
}
Чтобы консольное приложение не завершилось раньше времени, просто ждём клавишу:
Console.WriteLine($"👀 Слежение за {path} запущено. Нажмите Enter для выхода…");
Console.ReadLine();🔥
FileSystemWatcher избавляет от циклов опроса: оперативно, без лишних ресурсов и под любые типы файлов.Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥11❤10
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🤝48🔥16❤9👍5