Библиотека шарписта | C#, F#, .NET, ASP.NET
Все самое полезное для C#-разработчика в одном канале. Наши курсы: https://clc.to/y3LDtw По рекламе: @tproger_sales_bot Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead
إظهار المزيد📈 نظرة تحليلية على قناة تيليجرام Библиотека шарписта | C#, F#, .NET, ASP.NET
تُعد قناة Библиотека шарписта | C#, F#, .NET, ASP.NET (@csharpproglib) في القطاع اللغوي الروسية لاعباً نشطاً. يضم المجتمع حالياً 21 516 مشتركاً، محتلاً المرتبة 6 148 في فئة التكنولوجيات والتطبيقات والمرتبة 30 426 في منطقة روسيا.
📊 مؤشرات الجمهور والحراك
منذ تأسيسه في невідомо، حقق المشروع نمواً سريعاً وجمع 21 516 مشتركاً.
بحسب آخر البيانات بتاريخ 02 نوفمبر, 2026، تحافظ القناة على نشاط مستقر. خلال آخر 30 يوماً تغيّر عدد الأعضاء بمقدار -118، وفي آخر 24 ساعة بمقدار -1، مع بقاء الوصول العام مرتفعاً.
- حالة التحقق: غير موثّقة
- معدل التفاعل (ER): يبلغ متوسط تفاعل الجمهور 15.00%. وخلال أول 24 ساعة من النشر يحصد المحتوى عادةً 7.54% من ردود الفعل نسبةً إلى إجمالي المشتركين.
- وصول المنشورات: يحصل كل منشور على متوسط 3 228 مشاهدة. وخلال اليوم الأول يجمع عادةً 1 623 مشاهدة.
- التفاعلات والاستجابة: يتفاعل الجمهور بانتظام؛ متوسط التفاعلات لكل منشور يبلغ 4.
- الاهتمامات الموضوعية: يركز المحتوى على مواضيع رئيسية مثل .net, шарписта, навигация, await, string.
📝 الوصف وسياسة المحتوى
يصف المؤلف القناة بأنها مساحة للتعبير عن الآراء الذاتية:
“Все самое полезное для C#-разработчика в одном канале.
Наши курсы: https://clc.to/y3LDtw
По рекламе: @tproger_sales_bot
Для обратной связи: @proglibrary_feeedback_bot
РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead”
بفضل وتيرة التحديث المرتفعة (أحدث البيانات بتاريخ 03 نوفمبر, 2026) تحافظ القناة على حداثتها ومستوى وصول مرتفع. وتُظهر التحليلات تفاعلاً نشطاً من الجمهور، ما يجعلها نقطة تأثير مهمة ضمن فئة التكنولوجيات والتطبيقات.
IOptions<T>.
В отличие от классов, record в IOptions<T> в .NET сравнивается по значению. Он неизменяем, что защищает настройки от случайных изменений, а его лаконичный синтаксис делает код более чистым и поддерживаемым.
Теперь можно определять конфигурационные записи, загружать их из appsettings.json и внедрять в сервисы через IOptions<T>. Кроме того, IOptionsSnapshot<T> и IOptionsMonitor<T> позволяют динамически обновлять настройки без перезапуска приложения.
➡️ Подробности и примеры
🐸Библиотека шарписта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);
}
}
}
🐸Библиотека шарписта