Обновление текста замедляет работу приложения

У меня есть приложение календаря на иврите, где каждый день - это пользовательский элемент управления. У меня есть 6 меток в этом элементе управления для даты на английском языке, даты на иврите, еврейских праздников и некоторых других пользовательских данных. При прокрутке содержимое меток меняется по мере того, как значение даты для UserControl увеличивается или уменьшается в неделю. Прокрутка заметно медленнее, чем в календаре Microsoft Outlook, и профилирование показывает, что больше всего времени занимает обновление содержимого метки, которое не обрабатывается моим кодом.

Есть ли какой-нибудь способ, чтобы я мог сделать это быстрее? MS Outlook, похоже, имеет сопоставимое количество текстовых полей, а прокрутка плавная.


person Michael Sandler    schedule 02.08.2011    source источник


Ответы (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 не имеют функции макета, поэтому текст на иврите выводится задом наперед. Мне пришлось предварительно обработать строки на иврите с помощью функция реверса. Даже после реверсирования точки гласных в иврите оказались смещенными, поэтому я сохранил Labels для тех строк, в которых используются гласные.

person Michael Sandler    schedule 05.08.2011
comment
Несколько лет назад я был доведен до слез из-за того, как MS Word обрабатывает текст на иврите (направление текста произвольно меняется на противоположное в пределах одного слова), и я поражен превосходным управлением направление текста в редакторе Visual Studio. Признание и благодарность MicroSoft за улучшение! - person Michael Sandler; 05.08.2011

Я не могу быть уверен, но возможно, что MS Outlook был закодирован в чем-то более быстром, чем WPF, возможно, с использованием DirectX для быстрого отображения графики.

В противном случае я мог бы предложить уменьшить количество одновременных обновлений привязок, я бы предложил использовать дополнительный поток для постепенного обновления меток по мере появления запасных циклов, а не все сразу, что может быть причиной вашего заикания.

person Nick Udell    schedule 02.08.2011

Чтобы согласиться с предыдущим ответом, я рекомендую фонового работника. Используйте фонового работника для самой трудоемкой операции, которая выполняется во время прокрутки.

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

person MtnDew    schedule 02.08.2011