В настоящее время я пытаюсь создать сцену в WPF, где у меня есть около 250 элементов управления на экране, и пользователь может перемещать и изменять масштаб с этих элементов управления с помощью мыши.Производительность WPF для большого количества элементов на экране
Я запустил инструменты WPF Performance Suite приложения, когда на экране есть большое количество этих элементов управления (т. Е. Когда пользователь уменьшил масштаб) FPS падает до 15, что не очень хорошо.
Вот основной контур XAML:
<Window>
<Window.Resources>
<ControlTemplate x:Key="LandTemplate" TargetType="{x:Type local:LandControl}">
<Canvas>
<Path Fill="White" Stretch="Fill" Stroke="Black" StrokeThickness="1" Width="55.5" Height="74.687" Data="M0.5,0.5 L55,0.5 L55,74.187 L0.5,74.187 z"/>
<Canvas x:Name="DetailLevelCanvas" Width="24.5" Height="21" Canvas.Left="15.306" Canvas.Top="23.972">
<TextBlock Width="21" Height="14" Text="712" TextWrapping="Wrap" Foreground="Black"/>
<TextBlock Width="17.5" Height="7" Canvas.Left="7" Canvas.Top="14" Text="614m2" TextWrapping="Wrap" FontSize="5.333" Foreground="Black"/>
</Canvas>
</Canvas>
</ControlTemplate>
</Window.Resources>
...
<local:LandControl Width="55.5" Height="74.552" Canvas.Top="xxx" Template=" {StaticResource LandTemplate}" RenderTransformOrigin="0.5,0.5" Canvas.Left="xxx">
<local:LandControl Width="55.5" Height="74.552" Canvas.Top="xxx" Template=" {StaticResource LandTemplate}" RenderTransformOrigin="0.5,0.5" Canvas.Left="xxx">
<local:LandControl Width="55.5" Height="74.552" Canvas.Top="xxx" Template=" {StaticResource LandTemplate}" RenderTransformOrigin="0.5,0.5" Canvas.Left="xxx">
<local:LandControl Width="55.5" Height="74.552" Canvas.Top="xxx" Template=" {StaticResource LandTemplate}" RenderTransformOrigin="0.5,0.5" Canvas.Left="xxx">
... and so on...
</Window>
Ive пытался минимизировать детали в шаблоне управления, и я даже сделал массовый поиск и замену элементов управления, чтобы просто положить их исходные элементы инлайн вместо использования шаблона, но без заметных улучшений производительности.
Я видел другие вопросы, связанные с этим, и люди говорят, что нужно сделать собственный рисунок, но я не вижу, как это имеет смысл, когда вам нужно масштабировать и кастрюлю, как я.
Если кто-то может помочь здесь, это было бы здорово!
Марк
Спасибо за подробные ответы, пока 4.0 не может быть печально , но элементы Collapsing на определенных уровнях масштабирования, похоже, работают, вам просто нужно быть умными в том, как вы решаете, что показывать и когда. – Mark