Media is too big
VIEW IN TELEGRAM
В 2002 с релизом
.NET
мы получили достаточно примитивный вариант хэш-функции для строк. В 2010 его обновили, а текущая версия ушла еще дальше вперед. Поговорим про историю хэш-функций в .NET, почему так вышло и какие требования к ним применяются.
Затронем и тему криптографических функций — разберемся, зачем они вообще нужны и почему не используются по умолчанию.
Посмотрим на то, как проверяются качества хэш-функции в пакете SMHasher.
В качестве эталона будет предложена XXH3 и ее реализация на .NET, которая обгоняет текущий
string.gethashcode
по скорости и, скорее всего, превосходит по качеству.📌Видео
@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
Анализ больших объёмов данных – неотъемлемая и трудоёмкая часть аналитической деятельности. Наверняка вы сталкивались с проблемами, связанными с повышенным потреблением оперативной памяти и скоростью обработки.
Вот два примера решения подобных проблем на языке C#
1. Нехватка памяти при чтении очень больших файлов
Предположим, нам необходимо найти соответствия регулярному выражению в строках CSV файла. В этом случае нам может помочь оператор yield return.
▪️Метод-генератор AllLinesFromFile (string a_file_path) принимает на вход путь к файлу и возвращает итератор, указывающий на текущий объект коллекции - связный список, состоящий не более, чем из ста строк файла.
Продемонстрируем в методе Main() использование написанного генератора коллекции для чтения csv файла, состоящего из 437 строк: *в картинке
Примечания:
- Размер возвращаемой «порции строк» ограничен ста (для примера). Выбор значения должен зависеть от системных требований к потреблению памяти.
- Для чтения сложных форматов (JSON или XML) может потребоваться использование парсера.
- Метод AllLinesFromFile(string a_file_path) использует связный список строк в качестве типа возвращаемого элемента коллекции, чтобы избежать проблем с выделением памяти.
- Подробнее о операторе yield return в C# можно узнать на сайте Microsoft.
- Оператор yield также присутствует в других языках программирования, таких как Python, JavaScript и PHP.
2. Использование LINQ и PLINQ
@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
📣 Внимание C# разрабочики!
Сохраните этот пост и возвращайтесь к нему в любое время, когда вам понадобится освежить в памяти методы LINQ!
@csharp_ci
Сохраните этот пост и возвращайтесь к нему в любое время, когда вам понадобится освежить в памяти методы LINQ!
@csharp_ci
Лучший способ получать свежие обновлении и следить за трендами в разработке.
Python: t.iss.one/pythonl
C#: t.iss.one/csharp_1001_notes
C/C++/ t.iss.one/cpluspluc
Машинное обучение: t.iss.one/ai_machinelearning_big_data
Data Science: t.iss.one/data_analysis_ml
Devops: t.iss.one/devOPSitsec
Go: t.iss.one/Golang_google
Базы данных: t.iss.one/sqlhub
Rust: t.iss.one/rust_code
Javascript: t.iss.one/javascriptv
React: t.iss.one/react_tg
PHP: t.iss.one/phpshka
Android: t.iss.one/android_its
Мобильная разработка: t.iss.one/mobdevelop
Linux: t.iss.one/+A8jY79rcyKJlYWY6
Big Data: t.iss.one/bigdatai
Хакинг: t.iss.one/linuxkalii
Java: t.iss.one/javatg
Папка Go разработчика: t.iss.one/addlist/MUtJEeJSxeY2YTFi
Папка Python разработчика: t.iss.one/addlist/eEPya-HF6mkxMGIy
🇬🇧Английский: t.iss.one/english_forprogrammers
Please open Telegram to view this post
VIEW IN TELEGRAM
9 "Черная магия" и "трюки" в языке C#
C# является чрезвычайно продвинутым языком благодаря наличию в нем "синтаксического сахара".
"Сахар" настолько удобен, что некоторым может показаться, что они жестко прописаны в компиляторе C#, что-то вроде "черной магии".
Итак, давайте посмотрим, являются ли эти возможности в C# жестко прописанными компилятором ("черная магия") или расширяемыми ("трюки") "утиной типизацией".
Попробуйте определить сами)
Правильные ответы вы найдете в статье.
1. LINQ operations, with IEnumerable<T> type
2. async/await, with Task/ValueTask types
3. Expression trees, with Expression<T> type
4. Interpolated strings, with FormattableString type
5. yield return, with IEnumerable<T> type;
6. foreach loop, с IEnumerable<T> type
7. using keyword, with IDisposable interface
8. T?, with Nullable<T> type
9. Generic operations of Index/Range for any type
📌Статья
@csharp_ci
C# является чрезвычайно продвинутым языком благодаря наличию в нем "синтаксического сахара".
"Сахар" настолько удобен, что некоторым может показаться, что они жестко прописаны в компиляторе C#, что-то вроде "черной магии".
Итак, давайте посмотрим, являются ли эти возможности в C# жестко прописанными компилятором ("черная магия") или расширяемыми ("трюки") "утиной типизацией".
Попробуйте определить сами)
Правильные ответы вы найдете в статье.
1. LINQ operations, with IEnumerable<T> type
2. async/await, with Task/ValueTask types
3. Expression trees, with Expression<T> type
4. Interpolated strings, with FormattableString type
5. yield return, with IEnumerable<T> type;
6. foreach loop, с IEnumerable<T> type
7. using keyword, with IDisposable interface
8. T?, with Nullable<T> type
9. Generic operations of Index/Range for any type
📌Статья
@csharp_ci
В этой статье представлена коллекция фрагментов кода на языке C#, которые охватывают широкий спектр задач, с которыми можно столкнуться при разработке программного обеспечения.
Эти фрагменты не только демонстрируют возможности C#, но и служат полезным ресурсом для расширения вашего инструментария программиста.
Так что, независимо от того, являетесь ли вы опытным разработчиком или новичком в C#, погрузитесь в работу и изучите эти изящные решения с кодом!
📌Статья
@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥Awesome-C# — огромный список полезных фреймворков, готовых скриптов, библиотек и программного обеспечения.
▪Github
@csharp_ci
▪Github
@csharp_ci
JsonProperty.EFCore: Упрощаем работу с JSON-полями в Entity Framework Core
Иногда перед разработчиками встает задача использования JSON-полей в Entity Framework Core. Традиционный подход с использованием Fluent API требует написания дополнительного кода, что может усложнить проект. Пакет JsonProperty.EFCore решает эту проблему.
Проблема: Сложное управление JSON-полями
Entity Framework Core отлично поддерживает работу с реляционными базами данных, но управление JSON-полями может стать непростой задачей.
JsonProperty.EFCore: Упрощенный подход
JsonProperty.EFCore предлагает новое решение для управления JSON-полями. Он позволяет использовать JSON-поля в EF Core без необходимости настройки сложного Fluent API. Благодаря этому открытому проекту NuGet, разработчики могут упростить свой рабочий процесс и сосредоточиться на создании логики приложения, минуя сложные настройки EF Core.
Особенности и преимущества
Простая интеграция: JsonProperty.EFCore предлагает простой процесс интеграции.
Поддержка обобщенных типов: Пакет поддерживает обобщенные типы, такие как JsonEnumerable<T> и JsonDictionary<TKey, TValue>, что позволяет разработчикам работать с пользовательскими типами элементов в коллекциях JSON без усилий.
Безупречное управление JSON: С JsonProperty.EFCore управление JSON-полями становится намного проще.
Строгая сериализация типов: Пакет позволяет разработчикам включить строгую сериализацию типов.
Полиморфизм: строгая типизация позволяет сохранить полиморфные типы при сериализации и десериализации в JSON.
Примеры использования:
JsonProperty.EFCore, чтобы продемонстрировать его полезность и удобство:
Хранение параметров продукта:
А вот пример управления коллекцией JsonDictionary:
Это сгенерирует следующие данные для поля в формате JSON, если настройка JsonSettings.StrictTypeSerialization имеет значение true (по умолчанию):
Также можно добавлять и редактировать элементы поля JsonDictionary:
После этого JSON-поле примет следующий вид:
Управление элементами списка дел:
При этом в списке JsonList<TodoItem> можно также хранить элементы с типом, наследуемым от TodoItem.
Простое добавление полиморфного поля:
JsonProperty.EFCore:
Теперь можно использовать полиморфное поле:
▪Github
@csharp_ci
Иногда перед разработчиками встает задача использования JSON-полей в Entity Framework Core. Традиционный подход с использованием Fluent API требует написания дополнительного кода, что может усложнить проект. Пакет JsonProperty.EFCore решает эту проблему.
Проблема: Сложное управление JSON-полями
Entity Framework Core отлично поддерживает работу с реляционными базами данных, но управление JSON-полями может стать непростой задачей.
JsonProperty.EFCore: Упрощенный подход
JsonProperty.EFCore предлагает новое решение для управления JSON-полями. Он позволяет использовать JSON-поля в EF Core без необходимости настройки сложного Fluent API. Благодаря этому открытому проекту NuGet, разработчики могут упростить свой рабочий процесс и сосредоточиться на создании логики приложения, минуя сложные настройки EF Core.
Особенности и преимущества
Простая интеграция: JsonProperty.EFCore предлагает простой процесс интеграции.
Поддержка обобщенных типов: Пакет поддерживает обобщенные типы, такие как JsonEnumerable<T> и JsonDictionary<TKey, TValue>, что позволяет разработчикам работать с пользовательскими типами элементов в коллекциях JSON без усилий.
Безупречное управление JSON: С JsonProperty.EFCore управление JSON-полями становится намного проще.
Строгая сериализация типов: Пакет позволяет разработчикам включить строгую сериализацию типов.
Полиморфизм: строгая типизация позволяет сохранить полиморфные типы при сериализации и десериализации в JSON.
Примеры использования:
JsonProperty.EFCore, чтобы продемонстрировать его полезность и удобство:
Хранение параметров продукта:
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public JsonDictionary Parameters { get; set; } = new();
}
Запись JsonDictionary
аналогична JsonDictionary<string, object>. При этом полиморфизм позволяет хранить значения любых типов в таком словаре.А вот пример управления коллекцией JsonDictionary:
Product product = new() {Name="Phone",Price=500.95m,Amount=21,Parameters={
VirtualDictionary = new Dictionary<string,object>() {
{"Camera",13.5 },{"OS","Android" },{"Screen","1080x900"},{"Storage",32}
}
}};
db.Goods.Add(product);
db.SaveChanges();
Это сгенерирует следующие данные для поля в формате JSON, если настройка JsonSettings.StrictTypeSerialization имеет значение true (по умолчанию):
{
"Camera": [13.5, "System.Double"],
"OS": ["Android", "System.String"],
"Screen": ["1080x900", "System.String"],
"Storage": [32, "System.Int32"]
}
Также можно добавлять и редактировать элементы поля JsonDictionary:
Product product = db.Goods.FirstOrDefault();
product.Parameters.Add("Battery capacity", 3000);
product.Parameters.Edit(dict => {
dict["Battery capacity"] = 4000;
dict["Storage"] = 64;
dict.Add("RAM", 4);
return dict;
});
После этого JSON-поле примет следующий вид:
{
"Camera": [13.5, "System.Double"],
"OS": ["Android", "System.String"],
"Screen": ["1080x900", "System.String"],
"Storage": [64, "System.Int32"],
"Battery capacity": [4000, "System.Int32"],
"RAM": [4, "System.Int32"]
}
Управление элементами списка дел:
public class Note
{
public int Id { get; set; }
public string Header { get; set; }
public JsonList<TodoItem> Todos { get; set; } = new();
}
При этом в списке JsonList<TodoItem> можно также хранить элементы с типом, наследуемым от TodoItem.
Простое добавление полиморфного поля:
JsonProperty.EFCore:
using JsonProperty.EFCore;
class MyEntity
{
public int Id { get; set; }
public int Title { get; set; }
public JsonItem<Base> Content { get; set; } = new();
}
Теперь можно использовать полиморфное поле:
MyEntity myEntity = new();
myEntity.Content.Serialize(new DerivedType1());
Base val = myEntity.Content.Deserialize();
Console.WriteLine(val is DerivedType1); //true
▪Github
@csharp_ci