Найти в Дзене
StorageS3 0.6.2
Удивительно, но библиотека соединения с Minio жива и даже используется некоторыми коллегами. И, что особенно удивительно, коллеги проявляют интерес к тому, чтобы помогать эту библиотеку разрабатывать. Каюсь, первый и единственный PR висел почти год. Уважаемый коллега, который его сделал, прости меня! Короче говоря, смерджил изменения, добавил пару правок от себя и теперь библиотекой снова можно пользоваться - она в nuget...
1 год назад
C# string Array.IndexOf
В комментариях заметили интересное поведение при поиске строки в массиве. Если сделать Array.IndexOf по массиву строк, то скорость получается несколько ниже простого перебора в foreach со сравнением через Equals. Было предположение, что проблема в EqualityComparer<string>.Default (который, на самом деле GenericEqualityComparer<string>), но и это оказалось не верным предположением. То есть проблема где-то в Array.IndexOf. Оказалось верным подтвержденное бенчмарком предложение,...
1 год назад
C# Tree<T>
Дерево - очень полезная структура данных. Помимо того, что про него спрашивают на собеседованиях, дерево помогает хранить иерархически упорядоченные данные. Например, дерево элементов HTML, дерево зависимостей сущностей в игре, дерево подразделений в компании. Имплементация дерева лаконична и проста: public class Tree<T>(Tree<T>? parent, T value) { public readonly List<Tree<T>> Children = []; public readonly Tree<T>? Parent = parent; public readonly T Value = value; public Tree<T> Add(T value) { var child = new Tree<T>(this, value); Children...
1 год назад
DateTime и StringBuilder
При работе со StringBuilder есть ещё одна неприятность: метод StringBuilder.Append прекрасен, но, по какой-то странной для меня причине, не имеет перегрузки для DateTime. Я знаю, что многие разработчики просто передают туда дату и... попадают на boxing, поскольку будет выбран метод с сигнатурой, принимающей object. Либо, что тоже странно, коллеги просто делают dateTime.ToString(), аллоцируя промежуточную строку и просто передавая её в StringBuilder.Append. Вроде бы ничего страшного, вроде бы очень очень маленькая аллокация...
1 год назад
String на stack'е
Напоминаю про чудесный ValueStringBuilder, который находится в недрах .NET и является internal. Это идеальная вещь для замены StringBuilder на коротких строках. Фактически, он является одним из распространённых подходов к написанию zero-allocation кода. Чтобы его использовать в своём приложении необходимо... просто скопировать его код из репозитория .NET. Штука до боли простая - это ref struct, которая принимает в конструктор Span<char>. Обычно его создают на стеке путём stackallock char[256]. Если в процессе создания строки выяснятся, что переданного Span не хватает - используется честный массив из ArrayPool...
1 год назад
Если нравится — подпишитесь
Так вы не пропустите новые публикации этого канала