Что произошло за прошедшую неделю марта:
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Как устроены поколения в сборке мусора
Garbage Collector (GC) в .NET работает по поколенческой (generational) модели и использует три поколения, нумеруемые от 0.
1️⃣ Gen 0 (Первое поколение)
• В этом поколении создаются новые объекты.
• Сборки происходят часто, но занимают мало времени.
• Если объект переживает сборку мусора, он перемещается в Gen 1.
Очистка происходит когда выделено определенное количество памяти или когда в системе недостаточно памяти.
2️⃣ Gen 1 (Второе поколение)
• Содержит объекты, которые выжили после очистки Gen 0.
• Используется как буфер перед Gen 2.
• Очистка Gen 1 происходит реже, чем Gen 0.
Очистка происходит когда Gen 0 заполняется, и GC не смог освободить достаточно памяти.
3️⃣ Gen 2 (Третье поколение)
• Включает долгоживущие объекты, например, кеш, синглтоны.
• Очистка происходит редко и занимает больше времени.
• Все объекты, пережившие сборку в Gen 1, перемещаются в Gen 2.
Очистка происходит, когда в системе не хватает памяти.
А также есть LOH (Large Object Heap) – специальная область для больших объектов. В нём очистка очень редкая и дорогостоящая.
Чем меньше объектов доживает до Gen 2, тем лучше работает GC.
🐸 Библиотека шарписта #буст
Garbage Collector (GC) в .NET работает по поколенческой (generational) модели и использует три поколения, нумеруемые от 0.
• В этом поколении создаются новые объекты.
• Сборки происходят часто, но занимают мало времени.
• Если объект переживает сборку мусора, он перемещается в Gen 1.
Очистка происходит когда выделено определенное количество памяти или когда в системе недостаточно памяти.
• Содержит объекты, которые выжили после очистки Gen 0.
• Используется как буфер перед Gen 2.
• Очистка Gen 1 происходит реже, чем Gen 0.
Очистка происходит когда Gen 0 заполняется, и GC не смог освободить достаточно памяти.
• Включает долгоживущие объекты, например, кеш, синглтоны.
• Очистка происходит редко и занимает больше времени.
• Все объекты, пережившие сборку в Gen 1, перемещаются в Gen 2.
Очистка происходит, когда в системе не хватает памяти.
А также есть LOH (Large Object Heap) – специальная область для больших объектов. В нём очистка очень редкая и дорогостоящая.
Чем меньше объектов доживает до Gen 2, тем лучше работает GC.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🤔2❤1
Forwarded from Библиотека задач по C# | тесты, код, задания
Количество уникальных букв в строке
1. Создаем строку
2. Применяем метод
3. Вызываем метод
4. Добавляем параметр
1. Создаем строку
str
, которую нужно проанализировать.2. Применяем метод
Distinct()
для получения уникальных символов в строке.3. Вызываем метод
Count()
для получения количества элементов в последовательности уникальных символов.4. Добавляем параметр
char.IsLetter
, чтобы учитывать только буквы алфавита.😁25🥱8🔥6🤔1😍1
📝 Visual Studio теперь сам пишет комментарии
Microsoft представила автоматическую генерацию комментариев в Visual Studio с помощью GitHub Copilot.
Теперь, просто введя /// перед методом, можно получить готовое описание его работы, параметров и возвращаемого значения.
• Доступно в Visual Studio 17.14 Preview 2.
➡️ Подробнее в блоге разработчиков
Как думаете, полезно или лучше вообще не писать комментарии? 💬
🐸 Библиотека шарписта #свежак
Microsoft представила автоматическую генерацию комментариев в Visual Studio с помощью GitHub Copilot.
Теперь, просто введя /// перед методом, можно получить готовое описание его работы, параметров и возвращаемого значения.
• Доступно в Visual Studio 17.14 Preview 2.
Как думаете, полезно или лучше вообще не писать комментарии? 💬
Please open Telegram to view this post
VIEW IN TELEGRAM
👍40👏4❤3😁2🔥1
🐧 Пингвин, покоривший мир: история взлета Linux – ОС, управляющей 96% серверов
В 1991 году на компьютере с 4 мегабайтами памяти родилась программа, которая сегодня управляет большей частью интернета, смартфонами и даже космическими аппаратами. Это история Linux, рассказанная одним из первых свидетелей.
➡️ Читать статью
➡️ Зеркало
В 1991 году на компьютере с 4 мегабайтами памяти родилась программа, которая сегодня управляет большей частью интернета, смартфонами и даже космическими аппаратами. Это история Linux, рассказанная одним из первых свидетелей.
➡️ Читать статью
➡️ Зеркало
👍4🌚3😁1
Все важные моменты в одном репозитории. Сохраняйте себе в закладки.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6👾4🤔1
🎮💾 Оптимизация памяти в Unity: как избежать лагов и повысить FPS в играх
Оптимизация памяти в Unity — ключ к стабильной работе игр. Если хочется избежать лагов и повысить FPS, важно правильно управлять памятью. Использование эффективных методов загрузки и выгрузки данных, уменьшение количества аллокаций и грамотное применение сборщика мусора помогут улучшить производительность и стабильность игры.
➡️ Подробнее в статье
🐸 Библиотека шарписта
Оптимизация памяти в Unity — ключ к стабильной работе игр. Если хочется избежать лагов и повысить FPS, важно правильно управлять памятью. Использование эффективных методов загрузки и выгрузки данных, уменьшение количества аллокаций и грамотное применение сборщика мусора помогут улучшить производительность и стабильность игры.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤1
⚙️ Передаём данные между потоками
В C# есть несколько способов передать данные из одного потока в другой. Выбор зависит от требований к производительности, удобству и безопасности. Несколько распространенных вариантов:
1️⃣ Использование BlockingCollection<T>
Это потокобезопасная коллекция, позволяющая передавать данные от одного потока к другому.
2️⃣ Использование TaskCompletionSource<T>
Когда нужно передать значение между потоками в будущем.
3️⃣ Использование ConcurrentQueue<T>
Если нужно неблокирующее хранилище данных.
4️⃣ Использование Channel<T> (System.Threading.Channels)
Альтернативный подход к BlockingCollection<T>
💬 Какой вариант вам больше всего понравился?
🐸 Библиотека шарписта #буст
В C# есть несколько способов передать данные из одного потока в другой. Выбор зависит от требований к производительности, удобству и безопасности. Несколько распространенных вариантов:
Это потокобезопасная коллекция, позволяющая передавать данные от одного потока к другому.
var collection = new BlockingCollection<int>();
// Поток-поставщик (Producer)
Task.Run(() =>
{
for (int i = 0; i < 10; i++)
{
collection.Add(i);
Console.WriteLine($"Производитель: добавил {i}");
Thread.Sleep(500);
}
collection.CompleteAdding();
});
// Поток-потребитель (Consumer)
Task.Run(() =>
{
foreach (var item in collection.GetConsumingEnumerable())
{
Console.WriteLine($"Потребитель: получил {item}");
}
}).Wait();
Когда нужно передать значение между потоками в будущем.
var tcs = new TaskCompletionSource<int>();
// Поток-поставщик
Task.Run(() =>
{
Thread.Sleep(2000);
tcs.SetResult(42);
});
// Поток-потребитель
int result = await tcs.Task;
Console.WriteLine($"Получено: {result}");
Если нужно неблокирующее хранилище данных.
var queue = new ConcurrentQueue<int>();
// Поток-поставщик
Task.Run(() =>
{
for (int i = 0; i < 10; i++)
{
queue.Enqueue(i);
Console.WriteLine($"Добавлено {i}");
Thread.Sleep(500);
}
});
// Поток-потребитель
Task.Run(() =>
{
while (true)
{
if (queue.TryDequeue(out int item))
{
Console.WriteLine($"Получено {item}");
}
Thread.Sleep(100);
}
}).Wait();
Альтернативный подход к BlockingCollection<T>
var channel = Channel.CreateUnbounded<int>();
// Поток-поставщик
_ = Task.Run(async () =>
{
for (int i = 0; i < 10; i++)
{
await channel.Writer.WriteAsync(i);
Console.WriteLine($"Производитель: {i}");
await Task.Delay(500);
}
channel.Writer.Complete();
});
// Поток-потребитель
await foreach (var item in channel.Reader.ReadAllAsync())
{
Console.WriteLine($"Потребитель: {item}");
}
Please open Telegram to view this post
VIEW IN TELEGRAM
👍37
В нашем чате работает бот Shieldy — он защищает от спама, запрашивая у новых участников решение простой капчи.
⚠️ Проблема, с которой сталкиваются многие: вы нажимаете под постом «Прокомментировать», пишете что-то, а потом получаете бан и не можете писать комментарии.
❓Почему так: Shieldy отправляет капчу в сам чат, а не в комментарии под конкретный пост. Из-за этого капчу можно не увидеть, не отправить ответ на нее, и бот автоматически заблокирует вас.
— Зайдите в описание канала с телефона и нажмите кнопку Discuss / Чат
— Нажмите Join / Присоединиться
— Сразу обратите внимание на сообщение от бота Shieldy
— Решите простой пример и отправьте ответ в чат
После этого бот отправит приветственное сообщение и вы сможете оставлять комментарии. Эту проверку нужно пройти только один раз при вступлении в чат.
❗️ Если вас все-таки забанили
— Это временная блокировка на несколько минут
— Подождите и попробуйте зайти позже, бот снова отправит вам капчу
Админы канала никак не могут ускорить процесс, бот автоматически снимает с вас блокировку через пару минут. Мы понимаем, что эта система неидеальна, и ищем более удобное решение.
👾 Спасибо, что активно участвуете в обсуждении наших постов!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤1
Please open Telegram to view this post
VIEW IN TELEGRAM
😁32😢3
Регулярные выражения это что-то на эльфийском. Вместо ручного написания попросите об этом нейросеть с помощью промта:
I want you to act as a regex generator. Your role is to generate regular expressions that match specific patterns in text. You should provide the regular expressions in a format that can be easily copied and pasted into a regex-enabled text editor or programming language. Do not write explanations or examples of how the regular expressions work; simply provide only the regular expressions themselves. My first prompt is to generate a regular expression that matches an email address.
В этом примере будет сгенерировано выражение, для матчинга email-адресов.
💬 Часто пишете регулярки? Делитесь в комментариях! 🚀
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🥱12😁2👾1
🤯 Баги, которые IDE не смогла предсказать
Программисты доверяют своим инструментам, но иногда даже самая умная IDE оказывается бессильна перед хитроумными багами. Это те моменты, когда компилятор молчит, дебаггер пожимает плечами, а ты смотришь в монитор и думаешь: «Как так-то».
🛠 В Библиотеке программиста мы считаем, что самые крутые истории — это те, которые заставляют нас учиться. Делитесь своими случаями, когда:
— Компилятор не ругался, но всё работало "не так".
— Ошибка пряталась в очевидном месте, но её никто не замечал.
— Код выглядел идеально, но прод сказал: "ну ты и наделал..."
— Рефакторинг только ухудшил ситуацию.
Начнём с нашего админа:
🐸 Библиотека шарписта #междусобойчик
Программисты доверяют своим инструментам, но иногда даже самая умная IDE оказывается бессильна перед хитроумными багами. Это те моменты, когда компилятор молчит, дебаггер пожимает плечами, а ты смотришь в монитор и думаешь: «Как так-то».
🛠 В Библиотеке программиста мы считаем, что самые крутые истории — это те, которые заставляют нас учиться. Делитесь своими случаями, когда:
— Компилятор не ругался, но всё работало "не так".
— Ошибка пряталась в очевидном месте, но её никто не замечал.
— Код выглядел идеально, но прод сказал: "ну ты и наделал..."
— Рефакторинг только ухудшил ситуацию.
Начнём с нашего админа:
Одной из моих первых фичей была отправка письма по шаблону. Отправку реализовал — с этим проблем не возникло. Добавил логирование, чтобы отслеживать какие письма кому идут. Так случилось, что на тестирование подзабили, потому что письма на тестовой среде не отправлялись. Вывели это в прод и оказалось, что ошибся в форматировании строки в логах... IDE как-то упустила этот момент, а мне зелёному хотелось поскорее увидеть плоды своего творения. В тот же день я и повёз свой первый хотфикс.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2🔥1🥰1😁1
Начиная с C# 9 можно итерироваться по числам:
foreach (int x in 5)
Console.Write($"{x} ");
// Вывод: 1 2 3 4 5
foreach (var n in 42..46)
Console.Write($"{n} ");
// Вывод: 42 43 44 45 46
Для этого достаточно добавить расширение метода
GetEnumerator
:public static class Extensions
{
public static IEnumerator<int> GetEnumerator(this int x)
=> Enumerable.Range(1, x).GetEnumerator();
public static IEnumerator<int> GetEnumerator(this Range range)
=> Enumerable.Range(range.Start.Value, range.End.Value - range.Start.Value + 1).GetEnumerator();
}
Please open Telegram to view this post
VIEW IN TELEGRAM
👍26🤔20🥱7🌚5🔥3
Forwarded from Библиотека джависта | Java, Spring, Maven, Hibernate
🧩💊 Алгоритмическая самоуспокоенность: как мы разучились думать своей головой
Каждый день мы сталкиваемся с бесконечным потоком информации, которая не просто наполняет наш день, а управляет нашими мыслями. Социальные сети, алгоритмы и вечная гонка за вниманием приводят к тому, что мы забываем, как думать собственной головой.
Это не просто влияет на настроение, но и на способность анализировать информацию, принимать решения и, главное, не становиться частью системы манипуляций.
Если вы хотите вернуться к осознанному подходу в восприятии мира и научиться фильтровать контент, то эта тема точно для вас.
🔗 Подробнее в статье
🐸 Библиотека джависта
Каждый день мы сталкиваемся с бесконечным потоком информации, которая не просто наполняет наш день, а управляет нашими мыслями. Социальные сети, алгоритмы и вечная гонка за вниманием приводят к тому, что мы забываем, как думать собственной головой.
Это не просто влияет на настроение, но и на способность анализировать информацию, принимать решения и, главное, не становиться частью системы манипуляций.
Если вы хотите вернуться к осознанному подходу в восприятии мира и научиться фильтровать контент, то эта тема точно для вас.
Please open Telegram to view this post
VIEW IN TELEGRAM
💯6👍3🔥2
Please open Telegram to view this post
VIEW IN TELEGRAM
😁29
Перед тобой — сетка со словами, зашифрованными по горизонтали. Некоторые из них напрямую связаны с C#, другие — просто хорошо знакомы каждому программисту
💬 Напишите в комментариях, сколько слов смогли найти, и поделитесь своими находками под спойлером.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3❤2👾2🔥1
📰 Дайджест новостей за неделю
Собрали всё, что произошло на этой неделе, чтобы вы могли
🆕 .NET 10 Preview 2
Microsoft продолжает двигать .NET вперёд, и второй превью-релиз 10-й версии включает пачку обновлений во всех уголках платформы — от ядра до UI и облаков.
🧪 Microsoft обновили MSTest
Там не просто косметические апдейты. В этом релизе добавлено множество реально полезных фич, о которых просили разработчики.
🆕 MultiGit в Visual Studio
Теперь Visual Studio официально поддерживает работу с несколькими GitHub-аккаунтами.
📝 Visual Studio теперь сам пишет комментарии
🎮 Оптимизация памяти в Unity: как избежать лагов и повысить FPS в играх
🐸 Библиотека шарписта #свежак
Собрали всё, что произошло на этой неделе, чтобы вы могли
await
важное без блокирующего Thread.Sleep()
. Без null
, без boxing
, только актуальные штуки🆕 .NET 10 Preview 2
Microsoft продолжает двигать .NET вперёд, и второй превью-релиз 10-й версии включает пачку обновлений во всех уголках платформы — от ядра до UI и облаков.
🧪 Microsoft обновили MSTest
Там не просто косметические апдейты. В этом релизе добавлено множество реально полезных фич, о которых просили разработчики.
🆕 MultiGit в Visual Studio
Теперь Visual Studio официально поддерживает работу с несколькими GitHub-аккаунтами.
📝 Visual Studio теперь сам пишет комментарии
🎮 Оптимизация памяти в Unity: как избежать лагов и повысить FPS в играх
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤2🔥1
Forwarded from Библиотека собеса по C# | вопросы с собеседований
✍🏻 Какая из операций linq исключает дублирование одинаковых элементов в выходной последовательности?
Операция Distinct удаляет дублированные элементы из входной последовательности.
Библиотека собеса по С#
Библиотека собеса по С#
🥱39👍10😁2👾1
Forwarded from Библиотека задач по C# | тесты, код, задания
Какие две предопределенные функции наблюдаются при создании нового скрипта в Unity?
👾 — Start и Update
👍 — Awake и Start
🥰 — Void и Main
⚡️ — Ничего из вышеперечисленного
Библиотека задач по C#
👾 — Start и Update
👍 — Awake и Start
🥰 — Void и Main
⚡️ — Ничего из вышеперечисленного
Библиотека задач по C#
👾74⚡3👍1🥰1🥱1
💾 Как выбрать стратегию кэширования: разбор 7 популярных алгоритмов
Кешировать нужно с умом. И нет, LRU — не серебряная пуля.
В статье вас ждёт разбор алгоритмов: LRU, LFU, FIFO и другие
– Примеры, где каждый работает лучше
– Плюсы и минусы подходов
– Практические советы по выбору стратегии
Если проектируете систему с большими нагрузками или оптимизируете производительность — материал будет как раз.
➡️ Читать статью
🐸 Библиотека шарписта
Кешировать нужно с умом. И нет, LRU — не серебряная пуля.
В статье вас ждёт разбор алгоритмов: LRU, LFU, FIFO и другие
– Примеры, где каждый работает лучше
– Плюсы и минусы подходов
– Практические советы по выбору стратегии
Если проектируете систему с большими нагрузками или оптимизируете производительность — материал будет как раз.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤3
🪧 Достаём данные из Excel и обратно
Работа с Excel-файлами — одна из типичных задач в корпоративных приложениях. Часто возникает необходимость загрузить данные из Excel, обработать их и сохранить обратно. Рассмотрим простой способ решения этой задачи.
Для этого используем Spire.XlS.
1. Конвертируем Excel в DataTable
2. Конвертируем данные таблицы в Excel-документ
Для чего используете Excel в работе? Админ как-то раз видел беклог в таблице. Делитесь своими задачками для Excel в комментариях👇
🐸 Библиотека шарписта #буст
Работа с Excel-файлами — одна из типичных задач в корпоративных приложениях. Часто возникает необходимость загрузить данные из Excel, обработать их и сохранить обратно. Рассмотрим простой способ решения этой задачи.
Для этого используем Spire.XlS.
1. Конвертируем Excel в DataTable
using Spire.Xls;
using System.Data;
// Загружаем Excel-файл
Workbook workbook = new Workbook();
workbook.LoadFromFile("example.xlsx");
// Берём нужный лист
Worksheet sheet = workbook.Worksheets[0];
// Конвертируем в DataTable
DataTable dt = sheet.ExportDataTable();
2. Конвертируем данные таблицы в Excel-документ
using Spire.Xls;
using System.Data;
// Заполняем DataTable вручную (или берём из БД)
DataTable dt = new DataTable();
dt.Columns.Add("Name");
dt.Columns.Add("Age");
dt.Rows.Add("Alice", "25");
dt.Rows.Add("Bob", "30");
// Создаём Excel-файл
Workbook workbook = new Workbook();
Worksheet sheet = workbook.Worksheets[0];
// Вставляем данные
sheet.InsertDataTable(dt, true, 1, 1);
// Сохраняем
workbook.SaveToFile("output.xlsx", ExcelVersion.Version2013);
Для чего используете Excel в работе? Админ как-то раз видел беклог в таблице. Делитесь своими задачками для Excel в комментариях👇
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17🥱3❤1