По умолчанию, при передаче в метод или при возврате из метода, экземпляры значимых типов копируются, когда как экземпляры ссылочных типов передаются по ссылке. В 2008 году была выпущена книга «Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries». В этой книге рекомендовалосьЧитать полностью »
Рубрика «.net» - 2
Правило 16 байт: развенчиваем миф о производительности структур в C#
2024-03-04 в 7:00, admin, рубрики: .net, benchmark, C#Разобраться раз и навсегда: Task.WhenAll или Parallel.ForEachAsync в C#
2024-02-08 в 9:06, admin, рубрики: .net, async, csharp, parallel, parallel programming, parallel.foreach, ruvds_статьи, task, tplВсе хотят писать код, который работает быстро. Часто мы сидим, просматривая написанные алгоритмы и пытаясь понять, что можно сделать, чтобы настроить их производительность. В таком случае часто прибегают к параллельному выполнению задач. Конечно, если можно выполнять задачи параллельно и делать эту работу одновременно, то ожидаемо общее количество времени на обработку сократиться.
Если быстро посмотреть на результаты, которые появляются в интернете при поиске советов по реализации подобных вещей, то можно увидеть, что есть как много похожих, так и различных предложений от различных программистов. В какой-то момент поиска вы, вероятно, столкнётесь с поиском идеей использования Task.WhenAll
или Parallel.ForEachAsync
.
При чтении некоторых из этих материалов будет видно много различных противоречивых ответов как на StackOverflow, так и по всему интернету. Сегодня я собираюсь сравнить эти два метода с помощью определённых бенчмарков, которые стравят их друг против друга, чтобы, наконец, выяснить применимость каждого из двух методов.
Читать полностью »
Библиотека контролов для Avalonia UI
2024-01-29 в 12:38, admin, рубрики: .net, Avalonia UI, cross-platform, Delta Design, UIСобираем автономную игру на C# в 2 килобайтах
2024-01-08 в 13:00, admin, рубрики: .net, ruvds_перевод, sizecoding, минимизация исходного кодаМоё детство пришлось на эпоху 1,44-мегабайтных дискет и 56-килобитных модемов, поэтому я всегда любил маленькие программы. Раньше можно было записать на дискету кучу мелких игр и таскать её с собой. Если программа не помещалась на дискету, я задумывался, почему — в ней много графики? Есть музыка? Возможно, она выполняет много сложных операций? Или она просто раздута?
В наши дни дисковое пространство стало настолько дешёвым, что люди отказались от оптимизации по размеру.
Размер важен только при передаче: если вы передаёте программу по проводам, мегабайты равны секундам. По быстрому соединению на 100 Мбит в лучшем случае можно передать 12 МБ в секунду. Если на другом конце провода находится человек, ожидающий завершения скачивания, то разница между пятью и одной секундой может существенно повлиять на его ощущения.
Человек может зависеть от времени передачи как напрямую (пользователь, скачивающий программу по сети), так и косвенно (serverless-сервис, отвечающий на веб-запрос).
Люди обычно воспринимают всё, что длится меньше 0,1 секунды, как мгновенное, 3 секунды — это примерно тот предел, после которого прерывается состояние потока пользователя; а уж 10 секунд удержать внимание пользователя очень сложно.
Хотя уменьшение сегодня уже необязательно, оно всё равно лучше.
Эта статья задумывалась как эксперимент, позволяющий выяснить, каким может быть минимальный размер полезного автономного исполняемого файла C#. Могут ли приложения на C# достичь размеров, при которых пользователи будут ощущать их скачивание как мгновенное? Позволит ли это использовать C# там, где он не используется сейчас?
Читать полностью »
Обзор нововведений в C# 12
2023-10-20 в 10:51, admin, рубрики: .net, .net 8, alias, C#, C# 12, collection expressions, inline arrays, interceptors, primary constructors, spread operatorУже середина осени, а это значит, что новая версия C# на пороге. Самое время узнать, какие изменения настигнут язык совсем скоро. Хоть количество нововведений в этот раз уступает предыдущим релизам, интересных среди них немало.
Первичные конструкторы
Одно из самых заметных quality of life улучшений – возможность определить конструктор прямо в объявлении класса:
Читать полностью »
Как выглядят собеседования сейчас
2023-09-04 в 14:17, admin, рубрики: .net, интервью, интервью с разработчиками, интервьюирование, рекрутинг, собеседование, собеседование в IT, собеседованияВремена меняются, меняется it-индустрия. Крупные it-игроки ушли, с ними ушли стандарты, топовые специалисты и рабочие места. Соотношение вакансий и резюме удручает, всё выглядит как конкурс на бюджетные места в топовых вузах.
До последнего байта: минимальный вариант Hello World для .NET
2023-07-16 в 21:24, admin, рубрики: .net, C#, hello world, Занимательные задачки, минификация, низкоуровневое программирование, пет-проект, ПрограммированиеВот вам тупой вопрос, который вы сами, наверное, никогда себе не задавали. Каково минимальное количество байт, которые необходимо сохранить в исполняемом .NET-файле, чтобы CLR напечатала "Hello, World!" в консоли стандартного вывода?
FaceAuth или как с легкостью встроить FaceID в любое .NET приложение
2023-07-01 в 16:53, admin, рубрики: .net, authentication, face, faceidВ программировании есть много разных способов аутентификации и каждая из них имеет как свои плюсы, так и минусы. В этой статье я хотел бы сделать обзор библиотеки, позволяющей с легкостью добавить аутентификацию лица в ваше .NET приложение.
Пару слов обо мне
Сказка про For vs Foreach
2023-06-27 в 5:01, admin, рубрики: .net, .net core, C#, performance, Блог компании Контур, высокая производительностьВ предыдущих сериях
Микрооптимизации:
-
Сказка про Method as Parameter #dotnet #methods #gc
-
Инструменты анализа эффективности работы приложения. PerfView #performance_analysis #trace #perfview
-
Пародия на замыкания #dotnet #methods #gc
-
yield return #dotnet #il-code
Про тредпул:
-
ThreadPool.Intro #dotnet #threadpool
C# Linq для GraphQL-запросов
2023-06-25 в 6:56, admin, рубрики: .net, csharp, expressions, graphql, graphql-client, linq, linq2graphql, open source, translation, translator, Алгоритмы, Разработка веб-сайтовНемного про GraphQL
Дисклеймер: В статье рассматриваются только Query (аналог GET-запросов). Мутации и подписки не рассматриваются.
GraphQL - это инструмент, позволяющий заменить привычное API. Вместо написания контроллеров и методов, вы пишете методы в Query:
public class GraphQLQuery
{
public IQueryable<UserModel> GetUsers([Service] IUsersRepository repository)
{
return repository.Users;
}
}
Всего пару строк и вы добавили в приложение новый GraphQL-endpoint. Теперь к нему можно обратиться POST-запросом (обычно), передав вот такую строку:
users {
id
userName
roles {
code
description
}
}