Если помнишь, или посмотришь историю аватарок канала, там всё начиналось с витрувианского барабанщика 🫤 🥁
За время существования канала у меня, по случайному стечению обстоятельств, появилась одежда с соответствующими принтами: носки и футболка (я не заказывал их на всехмайках, честно😅)
Так вот, я больше года ждал, чтобы выгулять носки с витрувианской уткой🫤 🦆 на #ROCKNMOB (потому что только там записываю ногу) , и вчера наконец эта шалость удалась🪄
За время существования канала у меня, по случайному стечению обстоятельств, появилась одежда с соответствующими принтами: носки и футболка (я не заказывал их на всехмайках, честно😅)
Так вот, я больше года ждал, чтобы выгулять носки с витрувианской уткой
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8
Способы применения нейронок: техподдержка твоего компа 🖥️
Нейросети довольно интересным образом эволюционировали 📈
Сначала это был просто чат в браузере: задаёшь вопрос — получаешь ответ из того, чему модель научилась
Потом они научились искать информацию в интернете 🌐
Потом — принимать файлы и анализировать уже твои данные
А теперь нейросети можно дать доступ к файлам, папкам и различным системным инструментам, и вот тут начинается самое интересное ✨
#ИИшница может не только читать файлы, но и выполнять разрешённые действия: запускать команды, проверять соединения, смотреть логи, анализировать конфигурацию🛠️
И это очень удобно для диагностики всяких странных проблем
Например, недавно у меня проект не запускался, потому что его зависимости лежали в пакетном хранилище, до которого почему-то не было доступа 📦
Разбираться руками — это целый квест: проверить DNS, сеть, доступность хоста, настройки, запросы...
Нейросеть сама прошлась по этому пути: проверила соединения, попинговала нужные адреса, посмотрела результаты и в итоге объяснила, где проблема и что с ней делать 🕵️♂️
Или другой пример: у друга периодически вылетала игра. Причём совершенно непонятно почему: играем — и внезапно краш 💥
Можно вручную искать логи, смотреть журнал событий, вспоминать, какие драйверы недавно обновлялись...
А можно дать нейросети доступ к машине и попросить:
Она посмотрела логи падения, ошибки, состояние системы, драйверы и сопоставила события по времени 📊
В итоге выяснилось, что проблема была в драйвере RGB-клавиатуры🤦♂️
Причём руками до такой зависимости между «вылетела игра» и «виноват драйвер подсветки клавиатуры» можно вообще не додуматься🤯
Так что ещё одно из интересных применений нейросетей — техническая диагностика твоего компьютера
Главное, конечно, не давать бездумный доступ ко всему компьютеру. Доступ к файлам и выполнение команд должны быть ограничены тем, что ты хочешь доверить🔒
Нейросети довольно интересным образом эволюционировали 📈
Сначала это был просто чат в браузере: задаёшь вопрос — получаешь ответ из того, чему модель научилась
Потом они научились искать информацию в интернете 🌐
Потом — принимать файлы и анализировать уже твои данные
А теперь нейросети можно дать доступ к файлам, папкам и различным системным инструментам, и вот тут начинается самое интересное ✨
#ИИшница может не только читать файлы, но и выполнять разрешённые действия: запускать команды, проверять соединения, смотреть логи, анализировать конфигурацию
И это очень удобно для диагностики всяких странных проблем
Например, недавно у меня проект не запускался, потому что его зависимости лежали в пакетном хранилище, до которого почему-то не было доступа 📦
Разбираться руками — это целый квест: проверить DNS, сеть, доступность хоста, настройки, запросы...
Нейросеть сама прошлась по этому пути: проверила соединения, попинговала нужные адреса, посмотрела результаты и в итоге объяснила, где проблема и что с ней делать 🕵️♂️
Или другой пример: у друга периодически вылетала игра. Причём совершенно непонятно почему: играем — и внезапно краш 💥
Можно вручную искать логи, смотреть журнал событий, вспоминать, какие драйверы недавно обновлялись...
А можно дать нейросети доступ к машине и попросить:
Посмотри, почему игра вылетела
Она посмотрела логи падения, ошибки, состояние системы, драйверы и сопоставила события по времени 📊
В итоге выяснилось, что проблема была в драйвере RGB-клавиатуры🤦♂️
Причём руками до такой зависимости между «вылетела игра» и «виноват драйвер подсветки клавиатуры» можно вообще не додуматься🤯
Так что ещё одно из интересных применений нейросетей — техническая диагностика твоего компьютера
Главное, конечно, не давать бездумный доступ ко всему компьютеру. Доступ к файлам и выполнение команд должны быть ограничены тем, что ты хочешь доверить
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from C# Short Posts 🔞
⚡️ JIT: из IL в инструкции процессора
В прошлый раз мы прогнали код через конвейер компилятора и остановились на IL — промежуточном переносимом коде внутри .dll 📦
Но процессор про IL ничего не знает, ему нужны его собственные инструкции. Вот тут-то JIT и делает этот последний перевод
🕐 Кто такой JIT
JIT — Just-In-Time, «точно в срок». Это ещё один компилятор, но работает он не при сборке, а уже во время выполнения программы: берёт IL и превращает его в машинный код процессора, на котором прямо сейчас выполняется программа🤩
JIT делает это лениво, по методам. То есть, компилируется не весь .dll разом, а конкретный метод в момент своего первого вызова. Дальше уже используется его машинный код 🐁
🛠 Это компилятор, а не переводчик слов
JIT — это именно компилятор. Он не идёт по IL шаг за шагом, как интерпретатор, и не перекладывает одну инструкцию в другую один-в-один. Он подбирает инструкции текущего процессора, раскладывает значения по регистрам, кое-где оптимизирует
🔎 Смотрим своими глазами
Возьмём наш однострочник. В IL он был представлен тремя инструкциями: ldstr, call, ret. После обработки JIT-ом под x64 ЦПУ они превращаются в настоящий ассемблер (дикпик 1):
ldstr стал mov — кладём адрес нашей строки в регистр, откуда его заберёт вызов. call остался call, ret остался ret. А ещё JIT сам дописал пролог и эпилог (push/add вокруг) — это возня со стеком под вызов, которой в IL не было 🧹
Вот это уже те самые инструкции, которые процессор исполняет напрямую⚡️
Этот машинный код никуда не сохраняется на диск — JIT кладёт его прямо в память процесса, и с концом программы он исчезает. Почему так и чем за это платим — вернёмся, когда дойдём до памяти 🧠
🅰️ Что с этим делать
🟢 Первый вызов метода всегда чуть дороже: ровно в этот момент JIT его и компилирует. Из-за этого возникает такое явление, как «холодный старт», когда самые первые прогоны методов медленнее последующих
🟢 IL не исполняется сам по себе. Он лишь заготовка, которую JIT собирает в машинный код под запуск. Дальше уже работает этот нативный код
Причём JIT в первый раз переводит метод наспех, лишь бы программа уже начала выполняться. А если метод оказывается «горячим», то есть если он вызывается снова и снова, то в какой-то момент JIT компилирует его заново, уже с оптимизациями. Зачем так, как он это решает, и сколько бывает уровней оптимизации — расскажу в следующий раз 👉
🧑💻dp🥁
#dotnet #csharp #инженерныештучки #heavywednesday
В прошлый раз мы прогнали код через конвейер компилятора и остановились на IL — промежуточном переносимом коде внутри .dll 📦
Но процессор про IL ничего не знает, ему нужны его собственные инструкции. Вот тут-то JIT и делает этот последний перевод
🕐 Кто такой JIT
JIT — Just-In-Time, «точно в срок». Это ещё один компилятор, но работает он не при сборке, а уже во время выполнения программы: берёт IL и превращает его в машинный код процессора, на котором прямо сейчас выполняется программа
JIT делает это лениво, по методам. То есть, компилируется не весь .dll разом, а конкретный метод в момент своего первого вызова. Дальше уже используется его машинный код 🐁
🛠 Это компилятор, а не переводчик слов
JIT — это именно компилятор. Он не идёт по IL шаг за шагом, как интерпретатор, и не перекладывает одну инструкцию в другую один-в-один. Он подбирает инструкции текущего процессора, раскладывает значения по регистрам, кое-где оптимизирует
🔎 Смотрим своими глазами
Возьмём наш однострочник. В IL он был представлен тремя инструкциями: ldstr, call, ret. После обработки JIT-ом под x64 ЦПУ они превращаются в настоящий ассемблер (дикпик 1):
mov rdi, <адрес строки>
call Console.WriteLine(String)
ret
ldstr стал mov — кладём адрес нашей строки в регистр, откуда его заберёт вызов. call остался call, ret остался ret. А ещё JIT сам дописал пролог и эпилог (push/add вокруг) — это возня со стеком под вызов, которой в IL не было 🧹
Вот это уже те самые инструкции, которые процессор исполняет напрямую
Этот машинный код никуда не сохраняется на диск — JIT кладёт его прямо в память процесса, и с концом программы он исчезает. Почему так и чем за это платим — вернёмся, когда дойдём до памяти 🧠
🅰️ Что с этим делать
🟢 Первый вызов метода всегда чуть дороже: ровно в этот момент JIT его и компилирует. Из-за этого возникает такое явление, как «холодный старт», когда самые первые прогоны методов медленнее последующих
🟢 IL не исполняется сам по себе. Он лишь заготовка, которую JIT собирает в машинный код под запуск. Дальше уже работает этот нативный код
Причём JIT в первый раз переводит метод наспех, лишь бы программа уже начала выполняться. А если метод оказывается «горячим», то есть если он вызывается снова и снова, то в какой-то момент JIT компилирует его заново, уже с оптимизациями. Зачем так, как он это решает, и сколько бывает уровней оптимизации — расскажу в следующий раз 👉
🧑💻dp🥁
#dotnet #csharp #инженерныештучки #heavywednesday
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Виолетта Орлова | ХИТПОИНТ
Всем привет! В следующую пятницу 04.09 выступаем в баре Night Train Saloon 😎🎸
Начало в 20:30. Адрес: г.Москва, 1-й Угрешский проезд, д.7Ас2.
Вход свободный 🤗
Начало в 20:30. Адрес: г.Москва, 1-й Угрешский проезд, д.7Ас2.
Вход свободный 🤗
🔥3❤1
Forwarded from C# Short Posts 🔞
В прошлый раз мы увидели, как JIT переводит IL в машинный код процессора
Там я упомянул, что обычно метод сначала компилируется «наспех», чтобы он вообще работал. А если метод окажется горячим
Разберёмся, почему так, что такое горячий метод, и что за оптимизации👇
🎯 Дилемма: быстрый старт или быстрый код
У JIT конфликт интересов: по-хорошему, надо бы оптимизировать весь код, чтобы он был очень быстрым и эффективным. Но оптимизация — дело небыстрое. Если возиться с каждым методом при первом же вызове, программа будет мучительно долго стартовать 🐢
При этом некоторые методы вызываются лишь несколько раз за время выполнения программы, так что тратить время на их оптимизацию бессмысленно. А те, что вызываются постоянно, наоборот, хочется сделать супер-быстрыми 🔥
🟢 Tier0 — быстрый перевод без оптимизаций, чтобы метод поскорее заработал
🟢 Tier1 — компиляция с полным набором оптимизаций. Применяется только к тем методам, которые вызываются достаточно часто
🧰 Какие именно оптимизации?
🟢 Встраивание: тело короткого метода подставляется прямо в место вызова. Экономим на переходе к нему и открываем дорогу другим оптимизациям
🟢 Раскладка по регистрам: нужные значения переменных, аргументов, и промежуточных вычислений держатся в регистрах процессора — самой быстрой памяти, а не гоняются в оперативную память
🟢 Разворачивание циклов: короткий цикл превращается в несколько дублирований тела цикла, чтобы реже проверять условие выхода
🟢 Выкидывание лишнего: вычисления, результат которых никто не читает, просто убираются
♨️ Как JIT понимает, что метод горячий
У каждого метода есть счётчик вызовов. Пока его значение небольшое, вызывается та версия метода, которая была скомпилирована JIT при первом вызове, то есть на уровне Tier0. Как только счётчик переваливает за определённый порог, к методу в фоне применяется Tier1, и следующие вызовы идут уже к оптимизированному методу
По умолчанию этот порог составляет 30 вызовов (
DOTNET_TC_CallCountThreshold). Это можно увидеть вжиую, если включить сводку JIT (DOTNET_JitDisasmSummary=1) и гонять метод нужное число раз:calls=30 → JIT compiled Compute [Tier0]
calls=31 → JIT compiled Compute [Tier0]
JIT compiled Compute [Tier1]
До 30 вызовов включительно метод так и остаётся скомпилированным на Tier0. На 31-м же видно, что метод скомпилировался заново, уже на Tier1
🅰️ Что запомнить
🟢 Первые вызовы горячего метода идут по версии, скомпилированной на Tier0, то есть без особых оптимизаций
🟢 Если метод вызывается достаточно часто (по умолчанию, больше 30 раз), то он компилируется на Tier1, с оптимизациями
🤯 Вот это поворот
Заглавный дикпик заспойлерил, что на самом деле уровней больше😱
Ну или не прям уровней, а разновидностей Tier0 и Tier1, но это уже разберём в следующий раз 👉
🧑💻dp🥁
#dotnet #csharp #инженерныештучки #heavywednesday
Please open Telegram to view this post
VIEW IN TELEGRAM
Способы применения нейронок: изучение сложного материала🤯
В серии постов про #поиск_работы я упоминал, что для освежения знаний перед собесами пользовался нейронками, потому что им можно бесконечно долго(пока не кончатся бесплатные лимиты) задавать уточняющие вопросы. Тогда я осознал, что таким образом можно разобрать любую тему по винтикам 🔩 , разложить всю разработку на байтики, и собрать полную картину происходящего у себя в голове 🧩
В том числе поэтому я стал писать посты в канал C# Short Posts: чтобы закрепить изученную тему, пропускаю её через пальцы☝️
Обычно начинаю с чего-нибудь простого: прошу нейронку рассказать поверхностно про определённую тему, чтобы зацепиться за уже известные мне вещи. Дальше, когда вижу что-то незнакомое, непонятное, или сомнительное, уточняю про это. И дальше раскручиваю эту линию. В итоге #ИИшница раскрывает довольно много деталей, о которых ещё и не в каждой статье напишут
В разработке обычно правильный ответ на любой вопрос - "зависит", и нейронка помогает увидеть те самые нюансы, от которых как раз и зависит ответ на тот или иной вопрос
Понимание этих аспектов помогает, в итоге, и наиболее полно решить задачу, и блеснуть на собеседовании, иповыпендриваться профессионально выделиться перед друзьями из айтишки 🧠
В серии постов про #поиск_работы я упоминал, что для освежения знаний перед собесами пользовался нейронками, потому что им можно бесконечно долго
В том числе поэтому я стал писать посты в канал C# Short Posts: чтобы закрепить изученную тему, пропускаю её через пальцы
Обычно начинаю с чего-нибудь простого: прошу нейронку рассказать поверхностно про определённую тему, чтобы зацепиться за уже известные мне вещи. Дальше, когда вижу что-то незнакомое, непонятное, или сомнительное, уточняю про это. И дальше раскручиваю эту линию. В итоге #ИИшница раскрывает довольно много деталей, о которых ещё и не в каждой статье напишут
В разработке обычно правильный ответ на любой вопрос - "зависит", и нейронка помогает увидеть те самые нюансы, от которых как раз и зависит ответ на тот или иной вопрос
Понимание этих аспектов помогает, в итоге, и наиболее полно решить задачу, и блеснуть на собеседовании, и
Please open Telegram to view this post
VIEW IN TELEGRAM
Вчера был #движ на улице, обожаю выступать на улице ✨
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8💯4
Способы применения нейронок: редактор
Написание постов в канальчик занимает довольно много времени: подумай, напиши, исправь ошибки, добавь эмодзи, форматируй, и придумай картинку ⏳
Я уже привык, что #ИИшница помогает сделать многие задачи быстрее, поэтому хочется все эти шаги отдать нейронке если не полностью, то хотя бы самую рутинную часть
Как это можно сделать?
В последнее время я выработал для себя такую последовательность: надиктовываю голосовуху себе же в личку в телеге. По сути, это неструктурированный поток мыслей, и где-то там между строк есть основная мысль, которой и хотел бы поделиться с тобой. С помощью ИИ той же телеги транскрибирую это в текст. Текст отдаю нейронке (как правило, ChatGPT💭 ) с запросом "преобразуй это в пост для телеги". Меня поражает, что джипитиха при этом почти моментально отдаёт ответ ⚡️
Тут я получаю почти готовый , более-менее структурированный текст. Дальше начинается творческая часть, которую мне нравится делать: форматирование, эмоджики, свой стиль 🎨
Перед тем, делать это, прошу ту же Джепетту (наконец придумал, как поприкольнее называть её) нарисовать картинку на тему обработанного текста🖼
Иногда бывает, что тезисы на картинках в чём-то не совпадают с тезисами текста, потому что, получается, я обработал текст после картинки))
В целом на этом всё: получаю готовый пост, ставлю на отложку, иду пить кофе ☕
В общем-то, и творческие этапы можно тоже отдать нейронкам: Джепетта может добавить форматирования и расставить эмоджики. А ещё можно почти на всех этапах пользоваться нейронкой, встроенной в Телеграм, чтобы не тратить свои лимиты📈
Благодаря тому, что нейронку можно применять в качестве редактора текстов, время написания постов довольно сильно сокращается
Кстати, интересно, обратишь ли внимание, что этот пост был полностью написан вручную (и предыдущий из этой серии тоже)
Написание постов в канальчик занимает довольно много времени: подумай, напиши, исправь ошибки, добавь эмодзи, форматируй, и придумай картинку ⏳
Я уже привык, что #ИИшница помогает сделать многие задачи быстрее, поэтому хочется все эти шаги отдать нейронке если не полностью, то хотя бы самую рутинную часть
Как это можно сделать?
В последнее время я выработал для себя такую последовательность: надиктовываю голосовуху себе же в личку в телеге. По сути, это неструктурированный поток мыслей, и где-то там между строк есть основная мысль, которой и хотел бы поделиться с тобой. С помощью ИИ той же телеги транскрибирую это в текст. Текст отдаю нейронке (как правило, ChatGPT
Тут я получаю почти готовый , более-менее структурированный текст. Дальше начинается творческая часть, которую мне нравится делать: форматирование, эмоджики, свой стиль 🎨
Перед тем, делать это, прошу ту же Джепетту (наконец придумал, как поприкольнее называть её) нарисовать картинку на тему обработанного текста
Иногда бывает, что тезисы на картинках в чём-то не совпадают с тезисами текста, потому что, получается, я обработал текст после картинки))
В целом на этом всё: получаю готовый пост, ставлю на отложку, иду пить кофе ☕
В общем-то, и творческие этапы можно тоже отдать нейронкам: Джепетта может добавить форматирования и расставить эмоджики. А ещё можно почти на всех этапах пользоваться нейронкой, встроенной в Телеграм, чтобы не тратить свои лимиты
Благодаря тому, что нейронку можно применять в качестве редактора текстов, время написания постов довольно сильно сокращается
Кстати, интересно, обратишь ли внимание, что этот пост был полностью написан вручную (и предыдущий из этой серии тоже)
Please open Telegram to view this post
VIEW IN TELEGRAM
✍3🫡1 1
Сегодня отдыхаем, мои чюваки
Я как-то уже писал, что #ИИшница постепенно убирает естественные барьеры между работой и отдыхом, и теперь отдых тоже становится навыком, который надо уметь вовремя применить
Так что давай сегодня вместе отдохнём и наберёмся сил, чтобы завтра свернуть горы и создать шедевр✨
#heavywednesday
Я как-то уже писал, что #ИИшница постепенно убирает естественные барьеры между работой и отдыхом, и теперь отдых тоже становится навыком, который надо уметь вовремя применить
Так что давай сегодня вместе отдохнём и наберёмся сил, чтобы завтра свернуть горы и создать шедевр
#heavywednesday
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍1
Иногда нужен грув, иногда - рефакторинг, главное - соблюдать баланс между ними🪨
Поздравляю причастых к программированию - с Днём программиста!👩💻
А причастных к барабанам - с прошедшим Днём барабанщика!🥁
Поздравляю причастых к программированию - с Днём программиста!
А причастных к барабанам - с прошедшим Днём барабанщика!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8🔥2 1
Forwarded from C# Short Posts 🔞
🎯 Instrumented Tier0: профилирование кода
В прошлый раз мы разобрали два уровня компиляции: Tier0 — быстрый и неоптимизированный, и Tier1 — оптимизированный, для горячих методов. Но между ними прячется ещё одна стадия❗️
Возьмём наш однострочник
Один вызов — один дешёвый заход на Tier0, и программа кончилась. А теперь позовём тот же метод в цикле много раз:
🕵️ Что за Instrumented Tier0?
Это тот же неоптимизированный Tier0, но со встроенными счётчиками. Пока метод работает на нём, рантайм записывает статистику: сколько раз метод вызвали, какие ветки чаще срабатывают, какие типы приходят в вызовы. Такая статистика — это профиль работы метода, а сам сбор называется профилированием
Дальше, на стадии Tier1, JIT оптимизирует метод с учётом профиля его работы, чтобы ускорить его наиболее горячие точки, а не просто делать это наугад
Такая оптимизация называется PGO — Profile-Guided Optimization, и по умолчанию она включена с .NET8
⏱️ Почему до Tier1 теперь два этапа
В прошлом посте я говорил про порог в 30 вызовов между Tier0 и Tier1. Если бытьдушным точным, это актуально для кода, работающего на .NET < 8 или .NET>= 8, но с отключенной PGO (
Первые 30 вызовов — это обычный Tier0, без особых оптимизаций. На 31-м метод перекомпилируется в Instrumented Tier0, на котором начинает собирать профиль работы метода. Инструментированная версия работает ещё 30 вызовов, и только потом метод компилируется на Tier1 — уже с оптимизациями по профилю. Мотивация простая: чтобы оптимизировать по профилю, профиль сначала надо собрать🧠
🅰️ Что с этим делать
🟢 В релизных сборках кода начиная с .NET8 профилирование включено по умолчанию
🟢 Профилирование позволяет более точно ускорить горячий код: JIT оптимизирует его по реальному поведению
🟢 Прогрев до Tier1 стал дольше: профилю нужно накопиться
А зависит ли этот путь от каких-нибудь факторов? Конечно! Но об этом расскажу в следующем посте 👉
🧑💻dp🥁
#dotnet #csharp #инженерныештучки #heavywednesday
В прошлый раз мы разобрали два уровня компиляции: Tier0 — быстрый и неоптимизированный, и Tier1 — оптимизированный, для горячих методов. Но между ними прячется ещё одна стадия❗️
Возьмём наш однострочник
hello world, завернём его в метод Hello() для удобства измерений и запустим один раз. В сводке JIT будет одна строка:Program:Hello() [Tier0]
Один вызов — один дешёвый заход на Tier0, и программа кончилась. А теперь позовём тот же метод в цикле много раз:
Program:Hello() [Tier0]
Program:Hello() [Instrumented Tier0]
Program:Hello() [Tier1]
🕵️ Что за Instrumented Tier0?
Это тот же неоптимизированный Tier0, но со встроенными счётчиками. Пока метод работает на нём, рантайм записывает статистику: сколько раз метод вызвали, какие ветки чаще срабатывают, какие типы приходят в вызовы. Такая статистика — это профиль работы метода, а сам сбор называется профилированием
Дальше, на стадии Tier1, JIT оптимизирует метод с учётом профиля его работы, чтобы ускорить его наиболее горячие точки, а не просто делать это наугад
Такая оптимизация называется PGO — Profile-Guided Optimization, и по умолчанию она включена с .NET8
⏱️ Почему до Tier1 теперь два этапа
В прошлом посте я говорил про порог в 30 вызовов между Tier0 и Tier1. Если быть
DOTNET_TieredPGO=0). То есть в более свежих версиях фреймворка путь до Tier1 стал в два раза дольше из-за появления ещё одной стадии, которая длится так же примерно 30 вызовов (ну или смотря что у тебя указано в DOTNET_TC_CallCountThreshold)Первые 30 вызовов — это обычный Tier0, без особых оптимизаций. На 31-м метод перекомпилируется в Instrumented Tier0, на котором начинает собирать профиль работы метода. Инструментированная версия работает ещё 30 вызовов, и только потом метод компилируется на Tier1 — уже с оптимизациями по профилю. Мотивация простая: чтобы оптимизировать по профилю, профиль сначала надо собрать
🅰️ Что с этим делать
🟢 В релизных сборках кода начиная с .NET8 профилирование включено по умолчанию
🟢 Профилирование позволяет более точно ускорить горячий код: JIT оптимизирует его по реальному поведению
🟢 Прогрев до Tier1 стал дольше: профилю нужно накопиться
А зависит ли этот путь от каких-нибудь факторов? Конечно! Но об этом расскажу в следующем посте 👉
🧑💻dp🥁
#dotnet #csharp #инженерныештучки #heavywednesday
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3🔥3 3
