Architec.Ton is a ecosystem on the TON chain with non-custodial wallet, swap, apps catalog and launchpad.
Main app: @architec_ton_bot
Our Chat: @architec_ton
EU Channel: @architecton_eu
Twitter: x.com/architec_ton
Support: @architecton_support
Last updated 1 month ago
Канал для поиска исполнителей для разных задач и организации мини конкурсов
Last updated 1 month, 3 weeks ago
🦊 Лисьи лайфхаки для C#6
Добрый день, разработчики!
Сегодня разберем, почему конкатенация строк может быть очень "дорогой" операцией.
💡 Как на самом деле работает сложение строк:
```
// Что мы пишем:
string result = "";
result += "Привет"; // Шаг 1
result += " мой"; // Шаг 2
result += " друг"; // Шаг 3
// Что происходит на самом деле:
// Шаг 1:
char[] массив1 = new char[6]; // Выделяется новый массив
Копируем "Привет" в массив1 // Копируются символы
// Шаг 2:
char[] массив2 = new char[9]; // Новый массив большего размера!
Копируем "Привет" в массив2 // Копируем старые символы
Копируем " мой" в массив2 // Добавляем новые
// Шаг 3:
char[] массив3 = new char[14]; // Опять новый массив!
Копируем "Привет мой" в массив3 // Снова копируем всё старое
Копируем " друг" в массив3 // Добавляем новое
```
🎯 А вот как работает StringBuilder:
```
var builder = new StringBuilder();
builder.Append("Привет"); // Сохраняет ссылку на кусок
builder.Append(" мой"); // Сохраняет ссылку на кусок
builder.Append(" друг"); // Сохраняет ссылку на кусок
// Только при ToString() все куски собираются в одну строку
// За один проход, без множества промежуточных массивов!
string result = builder.ToString();
```
🔍 Почему это важно:
При конкатенации каждый раз создается новый массив
Каждый раз копируются ВСЕ символы из старой строки
В цикле это может привести к огромным затратам памяти
StringBuilder хранит ссылки на куски и собирает их только один раз
🦊 Лисий совет: Представьте, что вы переписываете текст. При конкатенации вы каждый раз берете новый лист и переписываете весь текст заново. А StringBuilder как закладки - помечает нужные куски, а переписывает всё только в самом конце!
#CSharp #Unity #GameDev #StringBuilder #Optimization #ЛисьиЛайфхаки
🦊 Лисьи лайфхаки для C#: Оптимизация размера Enum
Привет, разработчики! Сегодня разберём, как правильно выбрать размер для ваших Enum'ов и почему это важно!
💡 Размеры Enum в C#:
byte (1 байт):
public enum SmallEnum : byte // 0\-255 значений{
Weapon, // 0
Armor, // 1
Potion // 2
}
Идеален для небольших списков (до 255 значений)
Для флагов: максимум 8 бит
short (2 байта):
public enum MediumEnum : short
// от \-32,768 до 32,767
Для средних списков
Для флагов: максимум 16 бит
int (4 байта, по умолчанию):
public enum LargeEnum
// от \-2,147,483,648 до 2,147,483,647
Стандартный размер
Идеален для флагов (32 бита)
long (8 байт):
public enum HugeEnum : long
Используйте только при реальной необходимости
Для флагов: максимум 64 бита
🎯 Где размер действительно важен:
Массивы и коллекции:
ItemType[] items = new ItemType[1000];
// byte: 1KB vs int: 4KB
Структуры:
struct Item {
public ItemType Type; // byte: 1 байт vs int: 4 байта
public int Count; // 4 байта
}
Сетевая передача и сохранения:
[Serializable]
class NetworkPacket
{
public PlayerState State; // byte: 1 байт vs int: 4 байта
}
🦊 Лисьи советы:
Для простых списков до 255 значений → byte
Если нужно до 8 флагов → byte
Флаги до 32 → int
long только при острой необходимости
Всегда задавайте вопрос:
"Сколько значений мне реально нужно?"
❌ Частая ошибка:
// Плохо \- 4 байта для 4\-х значений
public enum WeaponType : int
{
Sword, Bow, Spear, Axe
}
// Хорошо \- 1 байтpublic enum WeaponType : byte
{
Sword, Bow, Spear, Axe
}
Довольно потирает лапки
Надеюсь, этот компактный гайд поможет вам оптимизировать использование enum'ов в ваших проектах!
4️⃣ Умное сохранение состояний:
```
C#
public class StateSaver
{
// Сохранение состояния в один int
public int PackState(bool isJumping, bool isRunning, bool isCrouching,
float health, int ammo)
{
int state = 0;
// Флаги в младших битах
if (isJumping) state |= 1;
if (isRunning) state |= 1 << 1;
if (isCrouching) state |= 1 << 2;
// Health 0\-100 упаковываем в 7 бит (0\-127)
int packedHealth =
Mathf.Clamp((int)(health * 1.27f), 0, 127);
state |= packedHealth << 3;
// Ammo 0\-255 упаковываем в последние 8 бит
state |= Mathf.Clamp(ammo, 0, 255) << 10;
return state;
}
// Распаковка состояния
public (bool isJumping, bool isRunning, bool isCrouching,
float health, int ammo) UnpackState(int state)
{
return (
isJumping: (state & 1) != 0,
isRunning: (state & (1 << 1)) != 0,
isCrouching: (state & (1 << 2)) != 0,
health: ((state >> 3) & 127) / 1.27f,
ammo: (state >> 10) & 255
);
}
}
```
💡 Лайфхаки и советы:
• Используйте константы для часто используемых масок
• Применяйте PopCount для подсчёта битов вместо циклов
• Кешируйте результаты битовых операций, если они используются часто
• Упаковывайте несколько значений в один int для экономии памяти
• Используйте uint вместо enum для больших наборов флагов
⚡ Преимущества этих техник:
• Меньше потребление памяти
• Быстрые битовые операции вместо условий
• Удобное сохранение/загрузка состояний
• Чистый и поддерживаемый код
#CSharp #GameDev #Optimization #Enum #BitOperations #ЛисьиУроки
🎮 РАЗДАЧА МУЗЫКАЛЬНОГО ПАКА ДЛЯ UNITY! 🎵
Hybrid Action Music Pack Vol.3 - набор высококачественной музыки для ваших игр (обычная цена $199)!
Что внутри:
Экшн музыка
Гибридные/электронные треки
Саундтреки в стиле sci-fi
Идеально для экшн-игр, триллеров и футуристических проектов
Как получить:
Переходим по ссылке на Unity Asset Store
Добавляем в корзину
Пост на канале: как заполнить данные (адрес и т.д.) чтобы не было tax
Вводим промокод: EPIKTONMUSIC
Забираем бесплатно!
🔥 Совместимость:
Unity 2021.3.4f1 и выше
Работает со всеми render pipeline (Built-in, URP, HDRP)
⚡️ Успейте до 5 декабря!
Здаров всем, я живой, меня никуда на границу не забрали, не поломали моих принципов и не сделали ультра патриотом, если кто из новеньких так думал А если кто-то из новеньких даже и не знает, что я админ этого канала, которому осталось отслужить ещё 10 месяцев…
Telegram
NOBICE
Здаров всем, я живой, меня никуда на границу не забрали, не поломали моих принципов и не сделали ультра патриотом, если кто из новеньких так думал А если кто-то из новеньких даже и не знает, что я админ этого канала, которому осталось отслужить ещё 10 месяцев…
Architec.Ton is a ecosystem on the TON chain with non-custodial wallet, swap, apps catalog and launchpad.
Main app: @architec_ton_bot
Our Chat: @architec_ton
EU Channel: @architecton_eu
Twitter: x.com/architec_ton
Support: @architecton_support
Last updated 1 month ago
Канал для поиска исполнителей для разных задач и организации мини конкурсов
Last updated 1 month, 3 weeks ago