2016年9月7日水曜日

[UWP][C#]非同期処理の処理時間

データを書き込むループを100万回回したときの処理時間。


同期処理 = 1ms
TaskのAsync/Await = 13505ms
TaskのWait() = 7934ms
IAsyncActionのAsync/Await = 14672ms
IAsyncActionのAsTask().Wait() = 26608ms


圧倒的に同期処理は早いです。
API回りで15ms以上掛かる処理にはAsyncな処理になってしまっているのですが、
通信処理って非常に繰り返し実行される部分なので当然処理コストを抑えたいのにTaskを使わないといけないんですよね。。

まぁループのオーダーが100万回なので、
1回当たりの処理コストの単位を[ms]から[ns]に変えてみると良く分かります。

O(1)な同期処理は1ns。当然早いですね。
タスクになると一回のasync/await処理コストの最大で見ると13us~30us
実際にコーディングすると2,3個awaitが発生するので
多くみて100usくらいコストを支払っている事になります。
遅い。。

0 件のコメント:

Androider