- - PR -
C#にてファイルダウンロードのレスポンスが遅い。
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-07-18 22:31
いつもお世話になっております。
.NET フレームワーク上のActiveXで少々不可解な現象が起こっていますので質問させていただきます。(IE上でWindowsコントロールを表示する技術のことです。) 御存知の方いらっしゃいましたら御教授ください。 下記の方法で「Javaで構築されたWebアプリからファイルをダウンロードする」機能を実装しています。 @ C# .NET2003(.NET Framework1.1)にてWebからファイルをダウンロードし、ローカルに保存する機能を持ったユーザーコントロールのDLLプログラムを作成する。 ちなみにダウンロードしている箇所のソースコードを抜粋すると
こんな感じで普通です。 A 次に@で生成したDLLをWebサーバー上に配置し、ローカルからでもDLLをダウンロードできるようにします。 http://hogehogehost/hoge/hunya.DLL をIEでつつくとDLLダウンロード可能。 B Objectタグをサーバー側HTMLに記述。
こうすることで、IE上でC#コントロールがロードできます。 C そのコントロールからファイルをダウンロードします。 実は困っているのはCなのです。 Cのファイルダウンロードが異常に遅いのです。 BにてObjectタグを使用してDLLをHTMLに埋め込んでいますがこれをC#の Formにコントロールを埋めて同じくファイルダウンロードできます。このときのファイルダウンロードにかかった時間に対して Cでかかった時間はおよそ7倍にもなります。 C#のFormで10秒でダウンロードできるものがIEのActiveX上だと1分10秒かかるのです。 (最初はプログレスバーのカウントアップをしているのですが、そこが遅いと思いこの処理を 外してみましたが速さはほとんど変わらずでした。) 何故こんなにレスポンスに違いが現れるのか御存知の方いらっしゃるでしょうか? 御教授ください。よろしくお願いします。 | ||||||||
|
投稿日時: 2006-07-20 21:54
本題から外れますが。
この catch ブロックは不要です。 ここで、例外情報をログに書くなどの処理がある場合は、「throw e;」ではなく、「throw;」とします。 「throw e;」だと、確かに同じ例外情報を持った例外を送出しますが、送出元がこの行になり、「どこで、なぜ、例外が発生したのか」がわかりにくくなります。 あと、クライアント OS はなんでしょう?Windows 2000 以前だと、かなり遅くなることを確認しています。 帯域をどれくらい使っているか、sniffer 等で確認してみてはどうでしょう? あれ?ActiveX? .NET アセンブリを IE でホストする、、、ではなく? [ メッセージ編集済み 編集者: Jitta 編集日時 2006-07-20 21:56 ] | ||||||||
|
投稿日時: 2006-07-20 22:06
本当はオリジナルExceptionをnewして投げているのですが、今回投稿するということで、つい適当に書いてしまいました。 誤解させてしまってすみません。。。 しかし、例外についてとてもためになることを知りました。ありがとうございます。
objectタグを使用していたのでてっきりそうだと思ってました。 そういう風に呼ぶんですね。なるほど。 | ||||||||
|
投稿日時: 2006-07-20 22:28
「オリジナル」を「元の」と勘違いしてしまった(^-^; 「独自の」ですね。 いわゆる「ノータッチ デプロイメント」になるので、バージョンのチェックなどでたくさんの通信が発生します。その関係も・・・ないな。それは表示するまでの話だもんな。 |
1