文本更新减慢了应用程序

时间:2011-08-02 10:34:16

标签: c# wpf optimization glyph

我有一个希伯来日历应用程序,每天都是UserControl。我在该控件中有6个标签用于英语日期,希伯来日期,犹太节日和其他一些用户定义的数据。滚动时,标签的内容会随着UserControl的日期值上升或下降一周而更改。滚动速度明显慢于Microsoft Outlook日历,并且分析显示最长时间的部分是更新标签内容,而不是我的代码处理。

有什么方法可以让它变得更快? MS Outlook似乎具有相当数量的文本字段,并且滚动顺畅。

3 个答案:

答案 0 :(得分:3)

TextBlocks并不比Labels明显快,但Glyphs给出了我的日历鞭子。

替换此

<TextBlock Padding="5"
           FontFamily="Narkisim"
           FontWeight="Bold"
           FontSize="20"
           Text="{Binding HebrewDate}"/>

用这个

<Glyphs Name="HebrewDate"
        Margin="5"
        StyleSimulations="BoldSimulation"
        FontUri = "/Fonts/nrkis.ttf"
        FontRenderingEmSize = "20"
        UnicodeString = "5771 ןושח ה"
        Fill = "Black"/>

滚动速度超快。

一些注意事项:

  1. Glyphs不支持绑定,所以我必须给每个人一个名字并在后面的代码中更新它们,如下所示:

    HebrewDate.UnicodeString = zman.HebrewDate;
    
  2. Glyphs没有布局功能,因此希伯来语文本向后出现。我不得不用reversing function预处理希伯来语字符串。即使在倒转之后,希伯来元音点也没有对齐,所以我保留了Labels用于那些使用元音的字符串。

答案 1 :(得分:1)

我无法确定,但有可能MS Outlook的编码速度比WPF快,可能使用DirectX快速显示图形。

否则我可能会建议减少一次更新的绑定数量,我建议使用额外的线程逐步更新标签,因为当有空闲周期而不是一次性更新时,这可能会导致你的口吃。

答案 2 :(得分:0)

为了配合上一个答案,我推荐后台工作人员。利用后台工作程序来完成在滚动期间执行的最耗时的操作。

http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx