文本更新减慢应用程序

本文关键字:应用程序 更新 文本 | 更新日期: 2023-09-27 18:04:09

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

有什么方法可以让这个更快吗?MS Outlook似乎有相当数量的文本框,滚动也很流畅。

文本更新减慢应用程序

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没有布局功能,所以希伯来文是向后出现的。我必须用反转函数预处理希伯来字符串。即使在反转之后,希伯来语的元音点也会出现错位,所以我保留了Labels用于那些使用元音的字符串。

我不能确定,但有可能MS Outlook是用比WPF更快的东西编码的,也许使用DirectX来快速显示图形。

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

与前面的答案一致,我推荐后台工作人员。利用后台工作线程来执行滚动过程中最耗时的操作。

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