1

私は毎日がUserControlであるヘブライ暦アプリを持っています。そのコントロールには、英語の日付、ヘブライ語の日付、ユダヤ教の祝日、およびその他のユーザー定義データ用に6つのラベルがあります。スクロールすると、UserControlの日付値が1週間上下するにつれて、ラベルの内容が変化します。スクロールはMicrosoftOutlookカレンダーよりも著しく遅く、プロファイリングにより、最も時間がかかる部分がラベルの内容の更新であることがわかります。これは私のコードでは処理されません。

これをより速くする方法はありますか?MS Outlookには同程度の数のテキストフィールドがあるようで、スクロールはスムーズです。

4

3 に答える 3

3

TextBlocksよりも目立って速くはありませんでしたLabelsGlyphs、カレンダーがむち打ちになりました。

これを交換する

<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母音を使う文字列はそのままにしました。

于 2011-08-05T13:41:22.617 に答える
1

確かではありませんが、MS Outlook が WPF よりも高速にコーディングされている可能性があります。おそらく、DirectX を使用してグラフィックをすばやく表示します。

それ以外の場合は、一度に更新するバインディングの数を減らすことをお勧めします。追加のスレッドを使用して、すべてを一度にではなく、余分なサイクルがあるときにラベルを徐々に更新することをお勧めします。

于 2011-08-02T11:08:31.407 に答える
0

前の回答に沿って、バックグラウンド ワーカーをお勧めします。スクロール中に実行される最も時間のかかる操作には、バックグラウンド ワーカーを利用します。

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

于 2011-08-02T12:30:10.447 に答える