私は、RXを頻繁に使用するWP7アプリケーションを構築しており、問題が発生しました。 20 msを超える値をThrottleに追加すると、パフォーマンスが大幅に低下します。ウィンドウの電話7でパフォーマンスが低下するスロットル操作
以下のスニペットは、問題をピンポイント:ここ
var moveObs = Observable.FromEventPattern<MouseEventHandler, MouseEventArgs>(
h => this.MouseMove += h,
h => this.MouseMove -= h);
// Observe dragging
var yObs = (from x in moveObs
select -(x.EventArgs.GetPosition(this).Y - _initY));
var result = yObs.SkipWhile(y => !_isDragging)
.Throttle(TimeSpan.FromMilliseconds(33));
result.TimeInterval()
.Subscribe(x => Debug.WriteLine("Mouse move interval: " + x));
は、スニペットの出力です:私の理解スロットルにそう
'UI Task' (Managed): Loaded 'Microsoft.Devices.Sensors.dll'
The thread '<No Name>' (0x1e18) has exited with code 0 (0x0).
Mouse move interval: [email protected]:00:04.1920000
Mouse move interval: [email protected]:00:00.2900000
Mouse move interval: [email protected]:00:00.6710000
The thread '<No Name>' (0x22a4) has exited with code 0 (0x0).
Mouse move interval: [email protected]:00:01.0460000
The thread '<No Name>' (0x2514) has exited with code 0 (0x0).
Mouse move interval: [email protected]:00:00.3250000
The thread '<No Name>' (0x270c) has exited with code 0 (0x0).
Mouse move interval: [email protected]:00:12.1420000
The thread '<No Name>' (0x186c) has exited with code 0 (0x0).
Mouse move interval: [email protected]:00:01.4860000
は、スレッドプールとウォンからスレッドを作成しますUIをブロックして、それは非常に効率的でなければならないでしょうか?
質問 なぜパフォーマンスが遅いのですか?私はRXの初心者ですので、おそらくここで何か不足しています。
編集
ここで同じ問題を再現する別のサンプルです:
var oneNumberPerSecond = Observable.Interval(TimeSpan.FromMilliseconds(10));
var lowNums = from n in oneNumberPerSecond
select n;
lowNums.Throttle(TimeSpan.FromMilliseconds(100))
.TimeInterval()
.Subscribe(lowNum => Debug.WriteLine(lowNum));
が、これはしかし、それはいずれも印刷されない、100ミリ秒ごとに番号を印刷する必要があります私の理解では。
「スロットル」はこの方法のベストネームではありません。 – Asti
あなたは絶対的です、私はそれをサンプルと混ぜました。しかし、実際にはパフォーマンスの問題はまだ存在する、私はこれは私が持っているものと非常に似た問題だと思う:http://social.msdn.microsoft.com/Forums/en-US/rx/thread/e6824c74-9c23-421f -bc25-81305b0e2a22/ – Vitalij
@Asti - BTW、 'Interval'は** cold ** observablesを生成します。 – Enigmativity