2013年08月29日

SignalRの速度実験

自分用実験です。

私「(SignalR使おうと思っているので)サーバーはWindows Server 2012にした方が早いですよ」
他の人「どのくらい違うの?」
私「さぁ(∀`*ゞ)テヘッ」

というのが発端でした。
IIS8+SignalR → WebSocket使える → 早い
とかいう単純な考えでしたごめんなさい。

ということで、SignalRの通信手段を変えて転送速度のテストをしてみました。
環境は:Windows 8 + Visual Studio 2012
ローカルのIISに接続しての実験です。(通信経路は最速と考えていいのかな?)

テスト内容は、
・サーバーから120KByte位のデータを受信
・10MByteを超えるまで続ける
・かかった時間(秒)を表示
・上記を5回繰り返して平均求める
って感じ。かなり適当に作ってます。

結果は、

WebSocketの場合
webSocket.PNG


Forever-Frameの場合
foreveFame.PNG


Long-Pollingの場合
longPolling.PNG


Server-Sent-Eventsの場合
serverSentEvents.PNG



Server-Sent-Eventsはよくわかりません。
棄権ということにしときましょう。


やっぱWebSocket早いよね。
Long-Pollingの約10倍、Forever-Frameに対しても3倍以上の速度が出ました。
めでたしめでたし。

posted by ぷにお at 11:12 | Comment(0) | ASP.NET | このブログの読者になる | 更新情報をチェックする

2013年08月26日

WPFアプリの二重起動防止ではまったこと

メモです。

既に起動しているかどうか、は今回は無視。(私はMutex使ってます)
問題はこの処理をどこに入れるか、ということ。

もともとFormsでやっていた処理(すでにMutexがあったら起動しない)ってのをどこに入れるのかですが、
なんとなく調べると結構な確立で「Application_Startup」が出てきます。
はい、私もそこに入れていました。


private void Application_Startup(object sender, StartupEventArgs e) {
  if (起動してたら) this.Shutdown();
}


こんな感じですね。
私のイメージでは、このイベント抜けたら(this.Shutdown()呼んだら)後は何も動かないで終わるよー、だったんですが実際には違っていてMainWindow(StartupUriに指定しているやつね)のコンストラクタは呼ばれるんですよね。
なのでMainWindowのコンストラクタでいろいろやっちゃうと悲しいことになります。

この場合はアプリケーションクラス(デフォルトではAppですね)のコンストラクタに処理を書くといい感じになります。


public App() {
  if (起動してたら) this.Shutdown();
}


なんでそーなのかとか、上の例が正しいのかとか、そーいうのは調べてませんのですごめんなさい。
(Startupとウィンドウインスタンスの生成は同じところでやっているのかな?)
posted by ぷにお at 16:13 | Comment(0) | WPF | このブログの読者になる | 更新情報をチェックする
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。