Foren: Offene Diskussion (Thread #23878)

【.NET Client】データセット変換機能とバインド使用時の速度について (2009-09-11 13:23 by Anonym #45823)

こんにちは、
表題の件についてなのですが、
画面のデータセットの内容は、
テーブル数:10個
カラム数(平均):10個で、
データ行数:1~最大でも10ほど
そのうちの3,4割をTextBox, NumericUpDown, ComboBoxにバインドしています。

値はサーバアプリがDBから取得し、Converterでクライアントにデータコピーし画面に表示させています。
この処理を画面起動時に行っているのですが、5秒ほどかかってしまっています。
バインドしているコントロールを減らしてみたり、Convertする列数を減らしてみたりしたのですが、
どちらにもそこそこ時間がかかっているような感じでした。
何か処理速度を上げるような方法はあるのでしょうか?よろしくお願いします。

Reply to #45823×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Anmelden

RE: 【.NET Client】データセット変換機能とバインド使用時の速度について (2009-09-14 10:53 by tatsumihr #45897)

> バインドしているコントロールを減らしてみたり、Convertする列数を減らしてみたりしたのですが、
> どちらにもそこそこ時間がかかっているような感じでした。
このような対応をしても実行時間が変わらないということは、
画面データセットやConverterとは関係ないところで処理が遅い可能性があります。

たとえば、初回実行時の.NET Framework自体のロード時間、
通信時間、サーバ側の処理時間、DBアクセス時間など。

いただいた情報からだけでは、判断が難しいです。
実際にどの処理にどれくらいの時間がかかっているかは分からないでしょうか?
Visual Studio Team Edition for Developers のパフォーマンス ツールなどを使って、
処理の遅いクラスやメソッドのあたりをつけていただけないでしょうか?
<http://msdn.microsoft.com/ja-jp/library/z9z62c29(VS.80).aspx>
Reply to #45823

Reply to #45897×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Anmelden

RE: 【.NET Client】データセット変換機能とバインド使用時の速度について (2009-09-15 13:00 by Anonym #45907)

返信ありがとうございます。

> いただいた情報からだけでは、判断が難しいです。
記述が不足しており、申し訳ないです。

> 実際にどの処理にどれくらいの時間がかかっているかは分からないでしょうか?
> Visual Studio Team Edition for Developers のパフォーマンス ツールなどを使って、
> 処理の遅いクラスやメソッドのあたりをつけていただけないでしょうか?

問題の画面は、ログイン(サーバでDB検索で認証あり)->メニュー画面->
画面A,B,C・・・の画面A(他の画面よりデータ数、コントロール数が多め)なのですが、
画面Aのロードイベントで

ここから
EventController.Execute();
ここまで

で5秒ほどかかっています。
このイベントコントローラで行う、
サーバ側の処理(DBアクセスのみ以外の処理は行っていません)は、0.01や0.02秒かです。
これはパフォーマンスツール未使用(ローカルの開発用サーバでデバッグ実行)の数値です。

パフォーマンスツールを使用して実行してみました。
デバッグ実行とは異なり動作はかなり早いですが、(ツール実行だからだったらすみません)
画面AのFormForwarderのExecute、EventController.exe、その他が6:3:1の割合で時間がかかっているようです。

まだ情報不足な方だと思いますが、よろしくお願いします。
Reply to #45897

Reply to #45907×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Anmelden

RE: 【.NET Client】データセット変換機能とバインド使用時の速度について (2009-09-15 17:55 by tatsumihr #45916)

情報が少ないので推測で回答いたします。

.NETのWindowsアプリケーションで性能が出ないケースは、
データアクセスで取得したデータ量が非常に多い場合などがあります。
今回のケースで画面データセットやビジネスロジック入出力データセットに数100行のデータが格納されている場合などは、
まずは業務仕様そのものを見直して、もっとサーバから取得するデータ量を減らせないかどうかを検討してください。

どうしても減らせない場合は、(1)ボトルネックとなっている処理をカスタマイズすることや、
(2)同期処理でのデータ取得ではなく、非同期処理にすることで見た目上の動作を改善するという方法があります。

(1)ボトルネック処理のカスタマイズ
ボトルネックとなっている処理が何かが分かれば、改善案は提示できると思いますが、
現状の情報ではどう直せば性能改善する可能性があるという案を出すことは難しいです。
まずはEventController中の何の処理が遅いのかを把握する必要があります。
入力値検証が遅いのか、データセット変換が遅いのか、ビジネスロジックが遅いのか、通信が遅いのか、など。

(2)非同期処理によるデータの取得
画面遷移直後に同期処理(EventController.Executeメソッド)によってデータを取得するのではなく、
非同期処理(EventController.ExecuteAsyncメソッド)によってデータを取得するという方法もあります。
根本的な解決にはなりませんが、ユーザの操作性を損なわないようにはできると思います。
ただし、非同期でのデータ取得が完了するまで、表示した画面のボタンを押下できないようにするなどは必要かと思います。
非同期処理を利用する場合は、十分注意して実装してください。


> パフォーマンスツールを使用して実行してみました。
> デバッグ実行とは異なり動作はかなり早いですが、(ツール実行だからだったらすみません)
> 画面AのFormForwarderのExecute、EventController.exe、その他が6:3:1の割合で時間がかかっているようです。
デバッグ実行でなければ動作は問題ないのでしょうか?
通常、パフォーマンスツールからの起動で実行速度が変わることはありません。
もしツールからの実行なら問題ないのであれば、環境によって実行速度が違うということになります。
デバッグ実行時にログなどを大量に出力していないでしょうか?もう一度ご確認ください。
Reply to #45907

Reply to #45916×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Anmelden

RE: 【.NET Client】データセット変換機能とバインド使用時の速度について (2009-09-15 21:49 by Anonym #45922)

返信ありがとうございます。

> デバッグ実行でなければ動作は問題ないのでしょうか?
> 通常、パフォーマンスツールからの起動で実行速度が変わることはありません。
> もしツールからの実行なら問題ないのであれば、環境によって実行速度が違うということになります。
> デバッグ実行時にログなどを大量に出力していないでしょうか?もう一度ご確認ください。

Visual Studioから実行すると、速度は遅いままでした。(デバッグ、リリース版ともに)
クライアントのexeファイルを直接実行し、サーバアプリをIISに設置し、実行すると速度があがりました。
パフォーマンスツールのときは以前早いままでした。
Reply to #45916

Reply to #45922×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Anmelden

RE: 【.NET Client】データセット変換機能とバインド使用時の速度について (2009-09-16 10:19 by tatsumihr #45931)

> Visual Studioから実行すると、速度は遅いままでした。(デバッグ、リリース版ともに)
> クライアントのexeファイルを直接実行し、サーバアプリをIISに設置し、実行すると速度があがりました。
> パフォーマンスツールのときは以前早いままでした。

フレームワークやアプリの作りの問題というよりも、開発環境の問題ではないでしょうか?
Visual StudioやEclipseを複数立ち上げてデバッグ実行すると、
どうしても開発PCへの負荷は高くなります。
開発時はPCのメモリを増設するなどで対応し、
性能測定時はデバッグ実行ではなくて、性能測定用の環境で実行してください。
それでもどうしても性能が出ない場合は、プロファイリングを行い、
ボトルネックとなっている処理を見直すことになります。

以上、よろしくお願いいたします。
Reply to #45922

Reply to #45931×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Anmelden