カスタム画鋲で Bing Maps を使用する .NET 4 アプリケーションに問題があります。マップのズームや移動のパフォーマンスが非常に悪い。ObservableCollection
Bing Maps へのデータ バインディングを持つを使用しています。マップが変更されるたびに、どの画鋲がマップ セクションにあるかがチェックされます。コレクションが再入力され、最後にNotifyCollectionChangedEvent
が起動され、マップに画鋲が描画されます。
<bingMap:MapItemsControl ItemsSource="{Binding Locations}">
<bingMap:MapItemsControl.ItemTemplate>
<DataTemplate>
<bingMap:Pushpin Location="{Binding Coordinates}" Height="Auto" Width="Auto" PositionOrigin="BottomCenter"
Template="{StaticResource PushpinControlTemplateLoc}">
</bingMap:Pushpin>
</DataTemplate>
</bingMap:MapItemsControl.ItemTemplate>
</bingMap:MapItemsControl >
パフォーマンス プロファイラーを使用していくつかの調査を行いました。InitializeComponent()
私のカスタム画鋲クラスのメソッドには、平均 25% から 35% の時間が必要です。
通常、マップには 10 ~ 25 個のカスタム画鋲が表示されます。データバインディングの量を減らすと、少し速くなりますが、それでも十分ではありません。
すべてのブラシを固定された静的リソースとして宣言するテストを既に実行しましたが、描画は依然として非常に低速です。
<SolidColorBrush x:Key="SolidColorBrushUnknownMsg" Color="Gray" ice:Freeze="True" xmlns:ice="http://schemas.microsoft.com/winfx/2006/xaml/presentation/options" />
<bingMap:Pushpin Location="{Binding Coordinates}"/>
はるかに高速なMicrosoft の既定の画鋲を使用しようとしました。したがって、カスタム画鋲の使用または実装に何か問題があるに違いありません。
これが私のコードの残りの部分です:
カスタム画鋲クラス (自動生成コードのみ):
public partial class MyPushpin: System.Windows.Controls.Grid
{
public MyPushpin()
{
InitializeComponent();
}
}
カスタム プッシュピン XAML コード:
<Grid x:Class="Test.MyPushpin"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d">
<Grid.Resources>
<Style BasedOn="{StaticResource DataTextBlock}" x:Key="test1" TargetType="TextBlock">
<Setter Property="Background" Value="{StaticResource SolidColorBrushErrorMsg}"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=TextLine1, Mode=OneWay}" Value="0">
<Setter Property="Background" Value="{StaticResource BackgroundImage}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Grid.Resources>
<Border CornerRadius="20" BorderBrush="White" Padding="7" Opacity="0.8" Width="120" Height="100" Background="{StaticResource BackgroundImage}">
<Grid >
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<TextBlock Grid.Row="0" Grid.Column="0" Text="test2" Foreground="Black" />
<TextBlock Grid.Row="0" Grid.Column="1" Text="{Binding TextLine2, StringFormat=N1,Mode=OneWay}" Style="{StaticResource DataTextBlock}" />
<TextBlock Grid.Row="0" Grid.Column="2" Text="{Binding objCurrentPower.sUnit,Mode=OneWay}" Foreground="Black" />
<!--three more lines of textblocks with data bindings -->
</Grid>
</Border>
カスタム画鋲に多くのパフォーマンスが必要なのはなぜですか?