TGViewer
codaza codaza @codaza · 4.59K subscribers
Post #56 5.46K
Всем привет!

Последние пару дней я занимался оптимизацией производительности высоконагруженного микросервиса, который обрабатывает финансовые транзакции. Микросервис написан весьма качественно и, честно говоря, некоторое время я был в затруднительном положении, так как казалось, что оптимизировать решительно нечего. Однако, наряду с другими небольшими улучшениями, один фактор всё же позволил мне добиться поставленных целей. Поэтому я рад поделиться этим знанием с вами 🙂

Уверен, что в самых разных источниках, вы читали, что в качестве параметра метода следует использовать IEnumerable<T>, если не требуется функциональность IList<T> или List<T>. Кроме того, хорошей практикой всегда считается следование принципу: Принимай наиболее общее (generic), а возвращай наиболее частное (specific). Это важные принципы, которых стоит придерживаться в подавляющем большинстве случаев. Всё же, бывают ситуации, в которых от этих принципов приходится отступать.

Как вы думаете, есть ли разница в определении параметра метода как IEnumerable<T> или List<T>?

Короткий ответ: да, разница есть.

Дело в том, что, когда параметр метода определяется через интерфейс IEnumerable<T>, в списке выполняются операции boxing и unboxing, что неизбежно ведет к лишним аллокациям в оперативной памяти. Как следствие, мы получаем потери в производительности. Иногда не критичные, а иногда вполне ощутимые. Таким образом, поменяв только тип параметра, мы можем существенно поднять производительность без внесения значительных правок. В моём случае, поставленные цели были достигнуты, и задача решена.

+1 к производительному коду ✅

Всем хороших выходных!
  • 👍 107
  • 🔥 24
More from @codaza
  1. Oct 28, 2022#капитану_на_заметку Всем привет! 👻 Понятие "качественный код" очень многогранно. Одна из…
  2. Oct 5, 2022#капитану_на_заметку Всем привет! Рефакторить код и визуально уменьшать синтаксические кон…
  3. Sep 14, 2022#капитану_на_заметку Всем привет! Мне нравится использовать подход Code First. Особенно уд…
  4. Sep 7, 2022#капитану_на_заметку Всем привет! Нельзя сказать, что генерация исключений в C# выглядит и…
  5. Aug 31, 2022#капитану_на_заметку Всем привет! Комментирование исходного кода — это здорово! Открыл исх…
  6. Aug 24, 2022#капитану_на_заметку Всем привет! Большинство web-сервисов предоставляют возможности для и…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →