2012-01-11 93 views
1

我有通過i轉換器與c綁定的DP a和b(注意a和b可能通過轉換器綁定到另一個DP)。我修改a和b或它們綁定的某些DP,然後在計算中使用c。我在for循環中這樣做,並且需要很長時間,條件是i=0; i<100000; i++)。所以我想知道數據綁定的效率如何?它應該用於這樣的場景嗎? 下面是一些示例代碼:WPF數據綁定的效率如何?

 for (int i = 0; i < 100000; i++){ 
      //... code to pick m based on some random numbers 
      hazards[m].Reactant1.Count -= 1; 
      hazards[m].Reactant2.Count -= 1; 
      hazards[m].Product.Count += 2; 
      display.Text = hazards[m].Value.ToString(); 
     } 

hazards.Value經由轉換器結合到反應物的數量,反應物的計數被綁定到文本框的文本屬性。 m是根據危險值和一些隨機數挑選出來的。

+2

聽起來像你應該從模型中分離視圖。看看MVVM。 – 2012-01-11 22:13:33

+1

@AvadaKedavra我知道MVVM是什麼,但我不知道如何與你的答案聯繫起來。 – mihajlv 2012-01-11 22:17:45

+0

你可以添加一些代碼嗎? – 2012-01-11 22:19:54

回答

0

長時間運行的任務不應該在UI線程中運行。如果你在這裏運行你的長時間運行計算,你的用戶界面將會很慢 - 與數據綁定的速度無關。由於您阻止了UI的更新。

如果您在後臺線程中更改值,那麼您必須使用爲您進行線程切換的調度程序。這又帶來了開銷。

在這兩種方式中,你有很多因素會減慢你的應用程序。 它並沒有真正說出任何可靠的數據綁定效率。

我建議你在後臺線程中編寫代碼並檢查它是否足夠快。如果不使用分析器來檢查你的瓶頸在哪裏。

2

我在for循環中這樣做,它需要很長時間,條件是i = 0;我< 100000; i ++)。所以我想知道數據綁定的效率如何?它應該用於像 這樣的場景嗎?

這就是問題 - 錯誤測試。誰在乎?如果您認爲您可以在用戶看到屏幕上顯示100000個更新,並且您已經弄錯了。另外還有一個問題,就是屏幕在緊密循環情況下如何/何時更新 - 您可能每秒鐘會更新60次更新。

你不測試數據綁定開始,你測試ALSO 100.000 tostring調用。

+0

我明白了,謝謝你的解釋。 – mihajlv 2012-01-11 23:16:41

1

這裏的正確方法是將與模型分開。爲此,使用MVVM(在網絡中有很多很好的INotifyPropertyChanged實現)。當ViewModel將準備(我meen基地視圖模型) - 應該實現這樣的:

[視圖模型]的.cs

private double _c; 
public double C 
{ 
    get { return _c; } 
    set 
    { 
     if (_c != value) 
     { 
      _c = value; 
      RaisePropertyChanged("C"); 
     } 
} 

[頁]的.xaml

... 
<UserControl.Resources> 
    <vm:ViewModel /> 
    ... 
</UserControl.Resources> 
... 
<TextBox x:Name="A" Text="{Binding C, Converter={StaticResource someConverter} Mode=TwoWay}" /> 
... 
<TextBlock x:Name="B" Content="{Binding C, Mode=TwoWay}" /> 
... 

ViewModelView更改C後,它會自動(與INotifyPropertyChanged幫助)在所有的地方更新它。這意味着你不應該運行任何循環或者你之前做的任何事情。

注:從零開始,我建議使用MvvmLight

+0

有趣的想法,我會看看鏈接。謝謝。 – mihajlv 2012-01-11 23:14:12