Библиотека шарписта | C#, F#, .NET, ASP.NET
Все самое полезное для C#-разработчика в одном канале. Наши курсы: https://clc.to/y3LDtw По рекламе: @proglib_adv Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead
Показати більше📈 Аналітичний огляд Telegram-каналу Библиотека шарписта | C#, F#, .NET, ASP.NET
Канал Библиотека шарписта | C#, F#, .NET, ASP.NET (@csharpproglib) у мовному сегменті Російська є активним учасником. На даний момент спільнота об'єднує 21 687 підписників, посідаючи 5 949 місце в категорії Технології та додатки та 30 265 місце у регіоні Росія.
📊 Показники аудиторії та динаміка
З моменту свого створення невідомо, проект продемонстрував стрімке зростання, зібравши аудиторію у 21 687 підписників.
За останніми даними від 31 серпня, 2026, канал демонструє стабільну активність. Хоча за останні 30 днів спостерігається зміна кількості учасників на -56, а за останні 24 години на -12, загальне охоплення залишається високим.
- Статус верифікації: Не верифікований
- Рівень залученості (ER): Середній показник залученості аудиторії становить 17.05%. Протягом перших 24 годин після публікації контент зазвичай збирає 7.97% реакцій від загальної кількості підписників.
- Охоплення публікацій: В середньому кожен допис отримує 3 698 переглядів. Протягом першої доби публікація в середньому набирає 1 728 переглядів.
- Реакції та взаємодія: Аудиторія активно підтримує контент: середня кількість реакцій на один пост – 23.
- Тематичні інтереси: Контент зосереджений навколо ключових тем, таких як .net, шарписта, навигация, await, string.
📝 Опис та контентна політика
Автор описує ресурс як майданчик для висловлення суб'єктивної думки:
“Все самое полезное для C#-разработчика в одном канале.
Наши курсы: https://clc.to/y3LDtw
По рекламе: @proglib_adv
Для обратной связи: @proglibrary_feeedback_bot
РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead”
Завдяки високій частоті оновлень (останні дані отримано 01 вересня, 2026), канал підтримує актуальність та високий рівень охоплення публікацій. Аналітика показує, що аудиторія активно взаємодіє з контентом, що робить його важливою точкою впливу в категорії Технології та додатки.
class Node
{
public int Value;
public Node Left;
public Node Right;
public Node(int value)
{
Value = value;
Left = Right = null;
}
// Вставка нового значения в дерево
public void Insert(int value)
{
if (value < Value)
{
if (Left == null)
Left = new Node(value);
else
Left.Insert(value);
}
else if (value > Value)
{
if (Right == null)
Right = new Node(value);
else
Right.Insert(value);
}
}
// Поиск значения в дереве
public Node Search(int value)
{
if (value == Value)
return this;
if (value < Value && Left != null)
return Left.Search(value);
if (value > Value && Right != null)
return Right.Search(value);
return null;
}
// Обход дерева в порядке (LNR - InOrder)
public void InOrderTraversal()
{
if (Left != null)
Left.InOrderTraversal();
Console.Write(Value + " ");
if (Right != null)
Right.InOrderTraversal();
}
}
Как это работает?
1️⃣ Вставка:
• Если значение меньше текущего узла, идём в левое поддерево.
• Если больше — в правое.
• Если узел пуст, создаём новый.
2️⃣ Поиск:
• Сравниваем искомое значение с текущим.
• Меньше — идём влево, больше — вправо, равное — нашли.
3️⃣ Обход:
• In-order обход (LNR) обходит узлы в отсортированном порядке.
💬 А вы уже реализовали BST? Делитесь опытом и вопросами в комментариях!
🐸Библиотека шарпистаvar jobKey = new JobKey("MyBackgroundJob");
builder.Services.AddQuartz(q =>
{
q.AddJob<MyBackgroundJob>(opts => opts.WithIdentity(jobKey));
q.AddTrigger(opts => opts
.ForJob(jobKey)
.WithIdentity("MyBackgroundJob-trigger")
.WithSimpleSchedule(schedule => schedule
.WithIntervalInSeconds(10)
.RepeatForever()));
});
Пример cron-выражения — каждый день в 3 утра:
q.AddTrigger(opts => opts
.ForJob(jobKey)
.WithIdentity("DailyTrigger")
.WithCronSchedule("0 0 3 * * ?"));
➡️ Подробности на сайте инструмента
🐸Библиотека шарпистаdotmemory start --save-to=memory_dump.dmp
3️⃣ Ищем утечки
Используем dotMemory, чтобы определить:
• Удерживаемые объекты .
• Долгоживущие объекты, которые не очищаются сборщиком мусора.
• Утечки, связанные с событиями и подписками.
💬 Боролись с утечками памяти в контейнерах? Какие инструменты использовали? Делитесь в комментариях ⬇️
➡️ Подробности в статье
🐸Библиотека шарпистаdotnet add package ChromaDB.Client2. Подключаем Chroma в C#-коде:
using ChromaDB.Client;
var configOptions = new ChromaConfigurationOptions(uri: "http://localhost:8000/api/v1/");
using var httpClient = new HttpClient();
var client = new ChromaClient(configOptions, httpClient);
3. Создаём коллекцию и добавляем данные:
var collection = await client.GetOrCreateCollection("movies");
var collectionClient = new ChromaCollectionClient(collection, configOptions, httpClient);
Chroma DB C# SDK — ещё один шаг к тому, чтобы .NET-разработчики легко создавали мощные AI-приложения.
➡️ Подробнее в блоге разработчиков
🐸Библиотека шарпистаvar result = dbContext.Orders
.GroupBy(o => o.CustomerId)
.OrderBy(g => g.Key)
.Select(g => new { CustomerId = g.Key, TotalOrders = g.Count() })
.ToList();
Такой код работал в предыдущих версиях EF, но теперь выбрасывает исключение.
➖ Как исправить
Можно принудительно выполнить запрос перед сортировкой, чтобы GroupBy обрабатывался в памяти:
var result = dbContext.Orders
.GroupBy(o => o.CustomerId)
.Select(g => new { CustomerId = g.Key, TotalOrders = g.Count() })
.ToList() // Выполняем в памяти
.OrderBy(g => g.CustomerId) // Теперь сортируем
.ToList();
Ошибка, вероятнее всего, будет исправлена в Entity Framework 10.
➡️ Суть проблемы в оригинале
🐸Библиотека шарпистаclass LSMTree
{
private SortedDictionary<string, string> memTable = new();
private const string WAL_FILE = "wal.log";
public LSMTree()
{
LoadFromWAL();
}
public void Put(string key, string value)
{
memTable[key] = value;
File.AppendAllText(WAL_FILE, $"{key}:{value}\n");
}
public string Get(string key)
{
return memTable.TryGetValue(key, out var value) ? value : "Not found";
}
private void LoadFromWAL()
{
if (File.Exists(WAL_FILE))
{
foreach (var line in File.ReadAllLines(WAL_FILE))
{
var parts = line.Split(':');
if (parts.Length == 2)
memTable[parts[0]] = parts[1];
}
}
}
}
➖Где используется
• NoSQL базы данных: LevelDB, RocksDB, Cassandra
• Поисковые системы: Elasticsearch, Apache Lucene
• Хранилища для логов и кэшей
➖ Преимущества LSM-дерева
• Быстрая запись – все изменения сначала пишутся в память
• Эффективное хранение – используется сжатие и компактификация
• Масштабируемость – отлично работает при больших объёмах данных
➖ Но есть нюансы
• Медленный поиск — требуется слияние уровней
• Утилизация ресурсов — периодическая компактификация требует CPU
🔗 Как вы храните данные в своих проектах? Делитесь в комментариях! ⬇️
🐸Библиотека шарпистаclass Graph {
private int V;
private List<int>[] adj;
public Graph(int v) {
V = v;
adj = new List<int>[v];
for (int i = 0; i < v; i++)
adj[i] = new List<int>();
}
public void AddEdge(int v, int w) {
adj[v].Add(w);
}
public void DFS(int start) {
bool[] visited = new bool[V];
DFSUtil(start, visited);
}
private void DFSUtil(int v, bool[] visited) {
visited[v] = true;
Console.Write(v + " ");
foreach (int n in adj[v]) {
if (!visited[n])
DFSUtil(n, visited);
}
}
}
🐸Библиотека шарпистаusing NUnit.Framework;
namespace MyProject.Tests;
[TestFixture]
public class CalculatorTests
{
private Calculator _calculator;
[SetUp]
public void Setup()
{
_calculator = new Calculator();
}
[Test]
public void Add_WhenCalled_ReturnsSum()
{
int result = _calculator.Add(2, 3);
Assert.That(result, Is.EqualTo(5));
}
}
Пара советов по эффективному тестированию:
• Изолируйте тесты: используйте [SetUp] и [TearDown] для подготовки и очистки данных.
• Избегайте зависимостей: мокируйте внешние сервисы с помощью Moq или NSubstitute.
📎 Подробные примеры кода
💬 Делитесь в комментариях своим опытом работы с NUnit
🐸Библиотека шарписта