Ответы пользователя по тегу WPF
  • Почему RenderTargetBitmap долго отрисовывается?

    @AlexHell
    судя по информации что я нашел https://stackoverflow.com/questions/56582013/why-t...
    RenderTargetBitmap doesn't take advantage of hardware rendering

    т.е. простыми словами - он рендерит на CPU, и в отличие от GPU рендеринга (шейдерами в играх как вы приводите сравнение), CPU рендеринг очень медленный, и не предназначен для высокого FPS, а скорее для оффлайн обработки как в граф редакторе без видеокарты :)
    Ответ написан
    Комментировать
  • Как по массиву точкек нарисовать круг WPF? Из миллиона точек?

    @AlexHell
    Зачем вызывается перерисовка элемента каждый раз с нуля. Если 99.9999999% его содержало не изменилось.

    если вы думаете об оптимизациях, которые вам точно нужны (вы замерили, решили что долго) то следует юзать кеширование, скажем в RenderTexture (обычно таки фреймворки графические ее поддерживают), т.е рендерите ваш очень тяжелый объект (что там SVG из миллиона полигонов у вас, не иначе?), а потом каждый фрейм только выводите содержимое из всех своих закешенных RenderTexture в экранный буфер (я рассказываю на низком уровне как)

    .. если же у вас вопрос - почему они перерисовывают треугольники \ круги \ полигоны (легкие) - потому что это просто реализовать (и код простой) и быстро происходит (т.к. не тяжелая графика), а хранение RenderTexture на каждый элемент это потребление памяти (мегабайты допустим на каждый, но зависит от размера экрана и\или размера элемента), плюс усложнение кода (когда перерендеривать целиком обеъкт в RenderTexture, сам код вывода из RenderTexture в экран) или воспользоваться чемто готовым - но это тоже усложнения так и так по сравнению с рендером каждый фрейм всего что надо в экранный буфер
    Ответ написан
  • Как оптимизировать анимации?

    @AlexHell
    я в WPF не шарю, мимо проходил
    есть опыт в Win Forms, Unity и сопутствующем
    может быть помогу чемто

    при каждом вызове метода с этой анимацией, создается обьект этой анимации, остается в памяти и там сидит до тех пор пока приложеине на закроется?

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

    вполне может быть что траблы с перформансом по таким причинам
    * ShowCard вызывается слишком часто, а этого кода вы не привели, вполне могут быть проблемы, например цикл из ShowCard или вызов его каждый такт (update или что там у вас в WPF)
    без защитного флага
    тогда когда надо сделать чтото в духе
    if (! isAnimPlayed)
    {
      isAnimPlayed = true;
      ShowCard ();
    }

    * слабый другой ПК, CPU \ GPU, уточняйте и тестите на аналогичных
    * много что модифицируется, т.е. window.cardQuestionBorder.RenderTransform это чтото большое и у него есть какието лишние потомки, и можно както разбить по-лучше
    Ответ написан
    6 комментариев