Ответы пользователя по тегу .NET
  • Jenkins, Jenkinsfile, dotnet pack, почему ошибка?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    stage("publish") {
        when {
            expression {
                GIT_BRANCH == 'build'
            }
        }
        steps {
            bat 'dotnet pack -c Release -o ".\artifacts" --no-build'
        }
    }


    Попробуй так. Я заменил тип кавычек с двойных на одинарные
    Ответ написан
  • Что плохого в использованиe в MethodImpl(MethodImplOptions.AggressiveOptimization)?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Во-первых, каждый раз это писать утомишься.
    Во-вторых, в .NET умный алгоритм оптимизации, если надо будет он оптимизирует сам.
    В-третьих, оптимизация ресурсоемкий процесс. В данном случае все быстро произошло. А теперь представить огромный проект на несколько миллионов строк кода, где некоторые части вообще не используются либо запускаются только 1 раз. Все они должны будут оптимизироваться самым ярым образом.

    В итоге: никто не запрещает его везде использовать, просто это "Экономически" не выгодно
    Ответ написан
    Комментировать
  • Почему в CoreCLR Int32.TryParse сделано не самым оптимальным образом?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Причина 1 (расширяемость)
    Если в будущем добавлять новые варианты NumberStyles, которые null должны обрабатывать иначе, либо какую-нибудь комбинацию, которая при null возвращает int.MinValue (например), то при проверке на null код сработает неправильно.

    Причина 2 (контракт)
    На вход всегда должны подаваться правильные данные. Очень странно, если будешь выполнять какую-либо работы с неправильными входными значениями.
    Я, например, всегда валидирую данные перед тем как выполнять работу.

    Причина 3 (легаси/совместимость)
    Может в старых версиях (.NET Framework) было такое поведение - исключение при неправильных данных
    Ответ написан
    2 комментария
  • Как правильно публиковать nuget packages с зависимыми проектами?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    1. Ссылаться нужно не на проект, а на другой пакет - тебе тогда надо публиковать 2 отдельных пакета

    2. Изменить .csproj так, чтобы в пакете был нужный .dll
    Ответ написан
  • Какой хостинг выбрать для ТГ бота на .Net?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Боты используют лонг-поллинг, поэтому DNS имя покупать/арендовать не надо, ровно как и платить за HTTP траффик приходящий (запросы). P.S. если ты на кол-беках делаешь, то надо.

    В данном случае подойдет любой хостинг, который поддерживает контейнеры.
    Такими могут служить:
    - Яндекс.Облако
    - Selectel
    - Hostinger
    - Digital Ocean

    и т.д. Просто вбиваешь - хостинг докер контейнеров.

    Если тебе нужно, хостить полноценное приложение (без докера), то круг выбора ссужается. Подсказать не могу.

    Лично я пользовался яндекс облаком - разворачивал полноценный Backend-Frontend на докеркомпозе. При регистрации дают бесплатные деньги (около 3тыс.)
    Ответ написан
    5 комментариев
  • Как при сборки мусора и перемещении объекта, сохраняется корректность ссылок?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Управление памятью в .NET для профессионалов

    Как работает сборка мусора.
    В .NET используется 2 фазная сборка мусора: Mark & Sweep (Пометить и Убрать).

    Mark

    На этом этапе обходится весь граф объектов. И выявляются все недостижимые.

    Каким образом достижимость объектов определяется?

    Достижимые это:
    - Аллоцированные на стеке
    - В статических полях
    - Достижимые из достижимых (см. выше)

    Все объекты, которые не удалось достичь (в граф не попали) - являются недостижимыми.

    Но на стеке лежат числа. могут быть как числами, так и адресами, как и числами?

    JIT копилятор достаточно умный, чтобы сгенерить код, который будет знать, что за объект/ссылка лежит на стеке. Так и получаются знания об объектах.

    Sweep

    Тогда итог, что языки с сборщиком мусора, под в 2 раза медленнее должны быть.(помимо сборки)

    Вот тут интереснее. Есть несколько хаков как достигается большая производительность.
    1. Линеризованное пространство памяти.
    Адреса 0, 1 и 2 поколения расположены не абы где, а последовательно, друг за другом. Т.е. если нужно сократить пространство 0 поколения, то это означает простое передвигание указателя влево.

    2. Переход в след. поколение происходит не всегда
    Из 0 в 1 - переход быстрый, но из 1 в 2 - не всегда.
    На этом этапе тоже может не затрачиваться много времени.

    3. Ссылки из недостижимых объектов не обновляются - эти объекты и так нигде не участвуют
    Обновление ссылок, к сожалению, - это ручное изменение и копирование. Ничего не поделаешь.

    Теперь где-то, сборщик мусора, начинает переносить arr в другое место.

    Ты слишком большой массив выделил, он аллоцируется в LOH. Оттуда не вытащишь.

    Я много о чем не упомянул. Например, очередь финализации, таблица дескрипторов (Handle), сегментирование памяти и т.д. но ответы на основные вопросы дал
    Ответ написан
    2 комментария
  • Как пользователю сохранить созданный файл?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    На SO уже есть ответ (ссылка) - он в нижнем примере.

    Подробнее:
    1. Файл отправляется в теле HTTP. Обычно закодирован base64.
    2. В заголовке "Content-Disposition" может быть название файла (самого заголовка может не быть)
    3. Когда браузер принимает файл, то создает свою внутреннюю ссылку на него. Тебе нужно создать свою ссылку (URL.createObjectURL). Потом создаешь тег с полученным URL и "кликаешь" на него (либо п...
    Ответ написан
    Комментировать
  • Как подключить сторонню библиотеку с dll-ками к проекту .net core?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    В Rider это можно сделать через тот же самый Add Reference.
    Правая кнопка по проекту -> Add -> Reference... -> Внизу нажимаешь "Add from..." -> Находишь свой dll
    Ответ написан
    Комментировать