Попытка улучшить производительность при запуске приложения WPF

Существует несколько способов анимации графика matplotlib. Ниже мы рассмотрим два минимальных примера, используя график рассеяния.

(a) использовать интерактивный режим plt.ion()

. Для анимации нам нужен цикл событий. Один из способов получения цикла событий - использовать plt.ion() («интерактивный»). Затем нужно сначала нарисовать фигуру и затем обновить график в цикле. Внутри цикла нам нужно нарисовать холст и ввести небольшую паузу для окна для обработки других событий (например, взаимодействия с мышью и т. Д.). Без этой паузы окно замерзло. Наконец, мы вызываем plt.waitforbuttonpress(), чтобы окно оставалось открытым даже после завершения анимации.

import matplotlib.pyplot as plt
import numpy as np

plt.ion()
fig, ax = plt.subplots()
x, y = [],[]
sc = ax.scatter(x,y)
plt.xlim(0,10)
plt.ylim(0,10)

plt.draw()
for i in range(1000):
    x.append(np.random.rand(1)*10)
    y.append(np.random.rand(1)*10)
    sc.set_offsets(np.c_[x,y])
    fig.canvas.draw_idle()
    plt.pause(0.1)

plt.waitforbuttonpress()

(b) с использованием FuncAnimation

. Многое из вышеизложенного может быть автоматизировано с использованием matplotlib.animation.FuncAnimation . FuncAnimation позаботится о цикле и перерисовке и будет постоянно вызывать функцию (в данном случае animate()) по истечении заданного интервала времени. Анимация запускается только после вызова plt.show(), тем самым автоматически запускается в цикле событий окна графика.

import matplotlib.pyplot as plt
import matplotlib.animation
import numpy as np

fig, ax = plt.subplots()
x, y = [],[]
sc = ax.scatter(x,y)
plt.xlim(0,10)
plt.ylim(0,10)

def animate(i):
    x.append(np.random.rand(1)*10)
    y.append(np.random.rand(1)*10)
    sc.set_offsets(np.c_[x,y])

ani = matplotlib.animation.FuncAnimation(fig, animate, 
                frames=2, interval=100, repeat=True) 
plt.show()

0
задан peeyush singh 26 March 2019 в 02:50
поделиться

2 ответа

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

Если в вашем пользовательском интерфейсе есть элементы, которые по умолчанию свернуты, все еще создается при запуске, даже если они не видны. Вы можете отложить загрузку этих элементов, пока они не отобразятся, установив для атрибута x: DeferLoadStrategy значение «Lazy». Это может улучшить производительность при запуске. Для получения дополнительной информации см. Атрибут x: DeferLoadStrategy.

Источник: https://docs.microsoft.com/de-de/windows/uwp/design/layout/layouts-with-xaml

0
ответ дан Denis Schaf 26 March 2019 в 02:50
поделиться

Вы запускали приложение в режиме выпуска? Одно это может улучшить время запуска.

Грубая вещь, которую я делал в прошлом, состояла в том, чтобы запустить приложение с отладкой и постоянно нажимать на паузу в Visual Studio. Если отладчик всегда останавливается в одном и том же месте, это проблемная область. Надеюсь, это в вашем собственном коде, так что у вас есть возможность изменить его.

Если у вас есть доступ к профилировщику, который обрабатывает ваш код, попробуйте использовать его. Visual Studio поставляется с одним, но вы можете использовать его только с определенными лицензиями.

0
ответ дан ProgrammerAl 26 March 2019 в 02:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: