Блокировка мусорщика даёт предсказуемый отклик, но требует точного расчёта свободной памяти и аккуратного завершения режима.
Что важно знать:
• Запланируй нужный запас;
• Мониторь рост потребления;
• Заверши режим вовремя.
Используй режим без пауз только в критических участках, чтобы убрать задержки и сохранить стабильность системы.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10❤6🤝6👍4
Лайфхак для Record Struct!
Знали ли вы, что
Он сочетает преимущества структур (располагаются на стеке) и record-типа (автогенерация
Такой тип можно использовать как ключ в словарях, сравнивать по значению и не бояться боковых эффектов:
А если нужно изменить одно поле, не нарушая иммутабельность — используйте
🔥 Главное — помнить, что
➡️ C# Ready | #практика
Знали ли вы, что
record struct — это не просто короткий способ описать данные, а отличный инструмент для иммутабельных value-типов, которые не создают лишних объектов в куче?Он сочетает преимущества структур (располагаются на стеке) и record-типа (автогенерация
Equals, GetHashCode, ToString):public readonly record struct Point(int X, int Y);
Такой тип можно использовать как ключ в словарях, сравнивать по значению и не бояться боковых эффектов:
var p1 = new Point(10, 20);
var p2 = new Point(10, 20);
Console.WriteLine(p1 == p2); // True
Console.WriteLine(p1); // Point { X = 10, Y = 20 }
А если нужно изменить одно поле, не нарушая иммутабельность — используйте
with:var p3 = p1 with { X = 99 };
Console.WriteLine(p3); // Point { X = 99, Y = 20 }🔥 Главное — помнить, что
record struct копируется по значению, так что большие структуры лучше не передавать по значению слишком часто.Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12❤9👍5
В C# появились логические и реляционные паттерны, которые позволяют писать условия естественно и компактно — без цепочек
if, && и лишних скобок.Первое условие проверяет диапазон значений, второе — одновременно распаковывает объект и фильтрует по свойству.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤17🔥6👍5
В C# 9 появились
record-типы с поддержкой value-семантики и ключевым словом with для копирования объектов с изменениями.record автоматически создаёт Equals, ToString и GetHashCode, а with позволяет не мутировать объект, а создавать новую версию на лету. Удобно для DTO, конфигураций, состояний и unit-тестов.Please open Telegram to view this post
VIEW IN TELEGRAM
❤12👍4🔥4
Object Pool помогает убрать фризы при частом создании пуль, эффектов и врагов.
Что важно знать:
• Объекты заранее создаются;
• Выключенные сохраняются в памяти;
• Возвращаются вручную в пул.
Такой подход стабилизирует FPS и делает игру плавнее даже на слабых устройствах.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥26🤝8❤6👎1
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥30🤝7👍3
В C# 9 появился атрибут
[ModuleInitializer], который позволяет запускать метод при загрузке сборки, ещё до входа в Main():[ModuleInitializer]
public static void Init() => Console.WriteLine("Module loaded");
Метод должен быть
public static void, без параметров.🔥 Используется для регистрации, логирования, подготовки контекста — без ручного вызова.
Вызывается один раз при старте .exe или загрузке
.dll.Please open Telegram to view this post
VIEW IN TELEGRAM
🔥19❤9👍5🤝1
Избавляемся от дублирования с помощью локальных функций!
В C# бывает, что внутри метода повторяется одна и та же логика. Обычно такие куски выносят в отдельные методы класса — но это засоряет интерфейс и усложняет структуру.
Теперь можно использовать локальные функции — объявлять вспомогательные методы прямо внутри других методов.
Для начала подключим стандартную библиотеку:
Опишем метод, внутри которого объявим локальную функцию:
Вызовем метод:
Вот что получится при запуске:
🔥 Локальные функции позволяют держать вспомогательную логику рядом с основным кодом, не засоряя класс лишними методами
➡️ C# Ready | #практика
В C# бывает, что внутри метода повторяется одна и та же логика. Обычно такие куски выносят в отдельные методы класса — но это засоряет интерфейс и усложняет структуру.
Теперь можно использовать локальные функции — объявлять вспомогательные методы прямо внутри других методов.
Для начала подключим стандартную библиотеку:
using System;
Опишем метод, внутри которого объявим локальную функцию:
void Process(int a, int b)
{
Console.WriteLine($"Double A: {Double(a)}");
Console.WriteLine($"Double B: {Double(b)}");
int Double(int x)
{
return x * 2;
}
}
Вызовем метод:
Process(3, 5);
Вот что получится при запуске:
Double A: 6
Double B: 10
🔥 Локальные функции позволяют держать вспомогательную логику рядом с основным кодом, не засоряя класс лишними методами
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14❤6🔥4
Паттерн
IDisposable помогает избежать утечек и безопасно освобождать внешние ресурсы вручную.Что важно знать:
• Финализатор не обязателен;
• Вызов можно повторить;
• Освобождает не только файлы.
Он делает код предсказуемым и избавляет от скрытых ошибок при работе с системными ресурсами.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11❤8👍5🤝1