Movatterモバイル変換


[0]ホーム

URL:


Zenn
Microsoft (有志)Microsoft (有志)
Microsoft (有志)Publicationへの投稿
👍

ReactiveProperty v7.8.0 をリリースしました

に公開
2023/02/07

ReactiveProperty v7.8.0 をリリースしました。
今回は Issue で報告のあった FilteredReadOnlyObservableCollection の性能改善と、それに付随する関連メソッドの性能改善になります。
具体的には以下のメソッドの性能改善及び挙動が変更になっています。

  • PropertyChangedAsObservable
  • CollectionChangedAsObservable
  • CanExecuteChangedAsObservable
  • ErrorsChangedAsObservable

上記メソッドは、以下のメソッドからも参照されているので、以下のメソッドについても性能改善および挙動の変更があります。

  • ObserveProperty
  • Observe(Add|Remove|Move|Replace|Reset)Changed
  • Observe(Add|Remove|Move|Replace)ChangedItems
  • ReadOnlyReactiveCollection
  • ObserveElementProperty
  • ObserveElementObservableProperty
  • ObserveErrorInfo
  • FilteredReadOnlyObservableCollection

計測結果

性能改善前と回前後でObserveProperty のベンチマークをとりました。

性能改善前

MethodCountMeanErrorStdDev
ObserveProperty14.662 us0.0403 us0.0377 us
ObserveProperty1046.159 us0.2482 us0.2322 us
ObserveProperty100488.395 us3.9745 us3.7177 us
ObserveProperty10007,299.851 us49.5364 us41.3651 us
ObserveProperty10000184,803.556 us2,443.4350 us2,285.5906 us
ObserveProperty10000021,848,008.562 us183,192.5623 us152,974.0864 us

性能改善後

MethodCountMeanErrorStdDev
ObserveProperty13.313 us0.0226 us0.0200 us
ObserveProperty1032.927 us0.2260 us0.2114 us
ObserveProperty100335.572 us2.0898 us1.9548 us
ObserveProperty10004,245.384 us82.0820 us91.2340 us
ObserveProperty1000079,851.266 us1,057.3668 us937.3281 us
ObserveProperty100000779,906.493 us8,120.6971 us7,596.1051 us

数が増えると大幅に性能に差が出てることがわかります。

動作について

この性能改善により以下の挙動が変わっています。

変更前

PropertyChangedAsObservableObserveProperty ではSynchronizationContext があるスレッドでSubscribe を行うと自動的にSubscribe を呼び出したスレッドでOnNext などの処理が呼ばれます。
なので、WPF や UWP や Xamarin.Forms などの UI スレッド上でSubscribe を行っていると自動的に UI スレッドでSubscribe が呼び出されていました。

変更後

SynchronizationContext があるスレッドでSubscribe を行ってもOnNext などは自動的にスレッドが切り替わることはありません。
イベントが発生したスレッド上でOnNext なども実行されます。

もし、明示的にスレッドを切り替えたい場合はObserveOnUIDispatcher などを Rx のメソッドチェーン内に含めて手動でスレッドの切替を行ってください。

各種リンク

https://github.com/runceel/ReactiveProperty

https://www.nuget.org/packages/ReactiveProperty/7.8.0

Microsoft (有志) により固定

📢 参加登録受付中!! Microsoft Cloud & AI Bootcamp
7 月 22 日(火)〜25 日(金)開催

4 日間にわるオンライン イベント「Microsoft Cloud & AI Bootcamp」を開催します。
本イベントでは、今注目されている課題と最先端のソリューションを厳選し、戦略立案から安全かつスケーラブルな実行に至るまで、AI 活用を加速させるための実践的な知識とスキルを習得いただけます。

詳細・申込はこちら👉https://www.microsoft.com/ja-jp/cloudandaibootcamp/

Kazuki Ota

日本マイクロソフトで働いています。ここに書いているのは個人の見解で働いている組織を代表するものではありません。好きな言語はC#。使ってるクラウドサービスはAzure。そのほかにもASP.NET CoreやWindowsアプリやMAUIも好きなので、そこらへんを書いていこうと思います。

Microsoft (有志)

Microsoft Azureをはじめとする最新技術情報をお届けします。※このPublicationは日本マイクロソフトまたは米Microsoft所属社員による個人の見解であり、所属する組織の公式見解ではありません。※Publicationに参加希望の社員は @07JP27までご連絡ください。

Discussion

日本マイクロソフトで働いています。ここに書いているのは個人の見解で働いている組織を代表するものではありません。好きな言語はC#。使ってるクラウドサービスはAzure。そのほかにもASP.NET CoreやWindowsアプリやMAUIも好きなので、そこらへんを書いていこうと思います。


[8]ページ先頭

©2009-2025 Movatter.jp