ResourceDictionary和严重的性能问题

时间:2013-05-16 03:41:22

标签: c# wpf performance xaml resourcedictionary

我的应用程序中有两个简单的ResourceDictionary

Converters.xaml

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:l="clr-namespace:MyApp" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <l:BitmapToBitmapSourceConverter x:Key="BitmapToBitmapSourceConverter"/>
    <l:ObjectToVisibilityConverter x:Key="ObjectToVisibilityConverter"/>
</ResourceDictionary>

Styles.xaml

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Style x:Key="ComboBoxBase" TargetType="{x:Type ComboBox}">
        <Setter Property="ItemTemplate">
            <Setter.Value>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <Image Height="16" Margin="0,2,2,2" Source="{Binding Image, Converter={StaticResource BitmapToBitmapSourceConverter}}" VerticalAlignment="Center" Width="16"/>
                        <TextBlock Text="{Binding}" VerticalAlignment="Center"/>
                    </StackPanel>
                </DataTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</ResourceDictionary>

当它们在我的MainWindow.xaml中合并时:

<Window>
    <Window.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="Properties/Converters.xaml"/>
                <ResourceDictionary Source="Properties/Styles.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Window.Resources>
    <Canvas>
        <ComboBox ItemsSource="{Binding Path=Items}" SelectedItem="{Binding Mode=TwoWay, Path=SelectedItem}" Style="{StaticResource ComboBoxBase}"/>

我在BitmapToBitmapSourceConverter内找到Styles.xaml时会收到异常,因为它已在另一个ResourceDictionary内定义。

有人建议我将资源从MainWindow.xaml移到App.xaml,以避免出现这种情况。我做到了,突然......戏剧!我不再得到那个例外,但我的应用程序加载时间已经变长了10倍。有时在我的屏幕上显示的时间超过5秒,通常Window内容为纯白色1秒或2秒。

我尝试从exe本身运行我的应用程序,我尝试在DebugRelease模式下运行它......没有。移动我的资源文件后无法获得良好的性能,我实际上无法将应用程序交付给我的客户。

任何人都可以解释为什么并为此提供一个好的解决方案?!

0 个答案:

没有答案