Да, с EF InMemory те же проблема, лучше брать TestContainers и проверять запросы на реальной БД. Для Ignite всё проще, запускаем embedded node с in-memory cache.
В данной статье я проверяю правильность работы фильтрации данных
Не проверяете, т.к. с таким моком фильтрация работает совсем иначе, чем будет в проде.
Если какую то часть кода нельзя протестировать, значить в коде есть проблема.
Но ценность таких тестов, где всё замокано - сомнительна. В проде будет трансляция LINQ -> SQL. То, что работает в тесте, может не работать (или работать по-другому) с реальной базой.
Тем более, что запустить тестовый узел Ignite - одна строчка на C#. Это и проще, чем моки, и делает тесты гораздо более полезными.
In mixed producer-consumer scenarios, ConcurrentBag<T> is generally much faster and more scalable than any other concurrent collection type for both large and small workloads.
Да уж, что поделать, программисты пишут неэффективный код (потому что это дешевле и быстрее - рыночек решает) и софт тормозит даже на лучшем железе, а на старом просто не работает.
Со структурами в любом виде много граблей. `struct` - это по сути оптимизация и ничего больше. Поэтому стоит как следует подумать, не является ли она преждевременной в каждом конкретном случае.
Выучил английский до уровня свободного устного общения только за счёт работы, без преподавателей. На это ушло порядка 7 лет. Сначала только чтение документации и переписка, потом участие в звонках как слушатель, просмотр докладов с субтитрами, потом постепенно заговорил и сам.
Помимо работы рекомендую потреблять весь интересующий контент тоже на английском - новости, хобби, и так далее. Мне особенно помог Top Gear: любимая телепередача + очень чёткая речь ведущих, легко понимать (в отличие от американского кино, где даже носители не всегда улавливают все слова - Movie Dialogue Has Gotten More Difficult To Understand).
Да, нагрузка на память в Решении 5 ровно такая же, как в Решении 1. Под капотом вызывается RuntimeHelpers.GetSubArray, который создаёт новый массив.
есть массив в мегабайт, далее я создал range на 3 элемента и собираюсь пользоваться только им - не получится ли так, что в памяти будет болтаться 1 мегабайт бесхозной памяти, потому что Span удерживает ссылку на массив в целом
Так и получится. Чудес нет - либо выделяем новый массив из 3 элементов, и старый будет удалён сборщиком мусора, либо делаем AsMemory / AsSpan- очень быстро и не выделяет память, но удерживает большой массив.
Вообще в подобной статье было бы здорово упомянуть AsMemory & AsSpan, они тоже работают с Range:
var numbers = new int[] { 5, 1, 4, 2, 3, 7 };
Memory<int> result = numbers.AsMemory()[2..5];
Cross my heart and hope to die ожидал здесь увидеть. Если piece of cake или once in a blue moon можно довольно легко понять из контекста, то эта идиома выглядит совершенно бессмысленной. Часто встречается в песнях.
В статье упущены значительные улучшения single-file applications — почти полностью ушли от распаковки файлов во временную директорию, скорость первого запуска в связи с этим заметно увеличилась.
Если это — единственная цель, то ответ — нет. Лучше учить Javascript, вакансий намного больше.
Но если есть цель стать хорошим разрабом, то C# — один из лучших вариантов для обучения, потому что даёт возможность попробовать себя во всех областях (бэк, фронт, игры, мобилки), и даёт понимание разнообразных концепций и подходов (асинхронщина, функциональщина, итд). После опыта с шарпом несложно переходить на другие языки. А вот с жаваскрипта перейти на что-то другое будет посложнее.
Rider и IDEA — это одна и та же IDE, заточенная под разные языки (как и все прочие IDE от жетбрейнс). Пользуюсь и тем и другим ежедневно, под Linux. Возможности примерно одинаковые.
Да, с EF InMemory те же проблема, лучше брать TestContainers и проверять запросы на реальной БД. Для Ignite всё проще, запускаем embedded node с in-memory cache.
Не проверяете, т.к. с таким моком фильтрация работает совсем иначе, чем будет в проде.
Не всегда. Обратная сторона медали - Test-induced design damage
Здорово видеть статью про Ignite!
Но ценность таких тестов, где всё замокано - сомнительна. В проде будет трансляция LINQ -> SQL. То, что работает в тесте, может не работать (или работать по-другому) с реальной базой.
Тем более, что запустить тестовый узел Ignite - одна строчка на C#. Это и проще, чем моки, и делает тесты гораздо более полезными.
Для целей object pooling есть класc ObjectPool
См When to use a thread-safe collection:
Да уж, что поделать, программисты пишут неэффективный код (потому что это дешевле и быстрее - рыночек решает) и софт тормозит даже на лучшем железе, а на старом просто не работает.
Великолепная статья, спасибо!
Когда впервые попробовал `ref struct` в деле, сразу Rust вспомнился. Отличная статья, спасибо. Помогла осознать
scoped
.Согласен с вышесказанным.
Со структурами в любом виде много граблей. `struct` - это по сути оптимизация и ничего больше. Поэтому стоит как следует подумать, не является ли она преждевременной в каждом конкретном случае.
Выучил английский до уровня свободного устного общения только за счёт работы, без преподавателей. На это ушло порядка 7 лет. Сначала только чтение документации и переписка, потом участие в звонках как слушатель, просмотр докладов с субтитрами, потом постепенно заговорил и сам.
Помимо работы рекомендую потреблять весь интересующий контент тоже на английском - новости, хобби, и так далее. Мне особенно помог Top Gear: любимая телепередача + очень чёткая речь ведущих, легко понимать (в отличие от американского кино, где даже носители не всегда улавливают все слова - Movie Dialogue Has Gotten More Difficult To Understand).
Да, нагрузка на память в Решении 5 ровно такая же, как в Решении 1. Под капотом вызывается
RuntimeHelpers.GetSubArray
, который создаёт новый массив.Так и получится. Чудес нет - либо выделяем новый массив из 3 элементов, и старый будет удалён сборщиком мусора, либо делаем
AsMemory
/AsSpan
- очень быстро и не выделяет память, но удерживает большой массив.Вообще в подобной статье было бы здорово упомянуть
AsMemory
&AsSpan
, они тоже работают сRange
:То есть ты считаешь, что MCAS норм тема, а виноваты пилоты?
Хороший доклад на эту тему https://youtu.be/h4V6V0u__8I
На рейсе 302 ручной привод стабилизатора было физически невозможно провернуть из-за повышенной нагрузки на стабилизатор (примерно 27 минута на видео).
Java streams - бледное подобие LINQ.
Гибкость и удобство намного ниже из-за отсутствия extension methods.
Нет Expression Trees (https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/expression-trees/), что ограничивает применение в ORM и рантайм кодогенерации.
Большинство электрокаров "безкоробочные", и появилось это "решение" ещё в 19 веке.
https://en.wikipedia.org/wiki/History_of_the_electric_vehicle
Поздние экземпляры набирали 120 км/ч за 10 секунд: https://en.wikipedia.org/wiki/Doble_steam_car
Современное видео Jay Leno's Garage, где понятно, что машина легко набирает скорость: https://www.youtube.com/watch?v=rUg_ukBwsyo
Cross my heart and hope to die
ожидал здесь увидеть. Еслиpiece of cake
илиonce in a blue moon
можно довольно легко понять из контекста, то эта идиома выглядит совершенно бессмысленной. Часто встречается в песнях.List
инвариантен, контравариантность — это другое (делегаты).https://docs.microsoft.com/en-us/dotnet/standard/generics/covariance-and-contravariance
В статье упущены значительные улучшения single-file applications — почти полностью ушли от распаковки файлов во временную директорию, скорость первого запуска в связи с этим заметно увеличилась.
Только windows :(
Если это — единственная цель, то ответ — нет. Лучше учить Javascript, вакансий намного больше.
Но если есть цель стать хорошим разрабом, то C# — один из лучших вариантов для обучения, потому что даёт возможность попробовать себя во всех областях (бэк, фронт, игры, мобилки), и даёт понимание разнообразных концепций и подходов (асинхронщина, функциональщина, итд). После опыта с шарпом несложно переходить на другие языки. А вот с жаваскрипта перейти на что-то другое будет посложнее.
Rider и IDEA — это одна и та же IDE, заточенная под разные языки (как и все прочие IDE от жетбрейнс). Пользуюсь и тем и другим ежедневно, под Linux. Возможности примерно одинаковые.