17
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ReactiveProperty と ReactivePropertySlim ってどれくらい違うの?

Posted at

ReactivePropertySlim のほうが早いよ。という説明はしましたが、どれくらい早いのか見てみましょう。
こういうとき便利なのが BenchmarkDotNet ですね。

ReactivePropertySlim の高速化のポイントの 1 つにインスタンス作成時のメモリアロケーションを最低限におさえるというのがあるように見えます(作ったの @neuecc さんなのでコード見てる雰囲気で…)。一方 ReactiveProperty はインスタンス作成時にちょっとした処理をしていたりします。では、どれくらい違うのか以下のようなベンチマークを書いてみました。

using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Running;
using Reactive.Bindings;
using System;
using System.Reactive.Subjects;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            BenchmarkRunner.Run<ReactivePropertyBehcnmark>();
        }
    }

    public class ReactivePropertyBehcnmark
    {
        [Benchmark]
        public ReactiveProperty<string> ReactivePropertyDefaultConstructor() => new ReactiveProperty<string>();
        [Benchmark]
        public ReactivePropertySlim<string> ReactivePropertySlimDefaultConstructor() => new ReactivePropertySlim<string>();
    }
}

実行結果は以下の通りです。

|                                 Method |      Mean |     Error |    StdDev |
|--------------------------------------- |----------:|----------:|----------:|
|     ReactivePropertyDefaultConstructor | 90.127 ns | 1.2563 ns | 1.1752 ns |
| ReactivePropertySlimDefaultConstructor |  5.383 ns | 0.1262 ns | 0.1181 ns |

はい。平均で 18 倍ほど ReactiveProperty のほうが new しただけで遅いですね。これでも ReactiveProperty も早くなるように努力したのですが、これ以上は今の自分だと Slim に迫ることはできませんでした。

この他にもスレッドのディスパッチとかしてないのもあって値の設定とかでも Slim のほうが早いはずです。興味のある方は試してみるといいかも。

まとめ

早い。

17
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?