C# アプリでは DataTable オブジェクトをいくつ使用する必要がありますか?

StackOverflow https://stackoverflow.com/questions/87514

質問

私はレガシー (まだオブジェクト指向) 開発ツールの経験豊富なプログラマーで、C#/.Net に切り替えています。SQL Server CE 3.5を使用して小さなシングルユーザーアプリを作成しています。概念的な DataSet と関連ドキュメントを読み、コードは機能します。

ここで、自分が「正しく」行っていることを確認し、経験豊富な .Net/SQL Server プログラマーから、ドキュメントを読んでも得られないようなフィードバックを得たいと思います。

いくつかの場所に次のようなコードがあることに気付きました。

var myTableDataTable = new MyDataSet.MyTableDataTable();
myTableTableAdapter.Fill(MyTableDataTable);

... // other code

シングル ユーザー アプリでは、通常、アプリの起動時にこれを 1 回だけ実行し、テーブルごとに DataTable オブジェクトをインスタンス化し、そのオブジェクトへの参照を保存して、既にデータが入力されている単一のオブジェクトを使用するだけで済みますか?こうすることで、データベースからデータを複数回読み取るのではなく、一度だけ読み取ることができます。それとも、このオーバーヘッドが非常に小さいため、問題にならないのでしょうか (さらに、大きなテーブルでは逆効果になる可能性があります)。

役に立ちましたか?

解決

CE の場合、おそらく問題ありません。このアプリを何千人ものユーザーにプッシュしていて、その全員が一元化された DB にアクセスしている場合は、最適化に時間を費やすことをお勧めします。CE のようなシングルユーザー インスタンス DB では、最適化が必要であるというデータがない限り、それについて心配する必要はありません。時期尚早な最適化など

他のヒント

2つの主要ないくつかのものの間の変化を決定する方法1。データは絶えずアクセスします2。データがたくさんあるのか

テーブル内のデータを常に使用する場合は、最初の使用時にデータをロードします。データをたまにしか使用しない場合は、必要なときにテーブルにデータを入力し、その後破棄してください。

たとえば、10 個の GUI 画面があり、そのうちの 1 つでのみ myTableDataTable を使用する場合は、その画面でのみ myTableDataTable を読み込みます。

実際、選択は C# 自体には依存しません。それは、次のバランスをとることによって決まります。

  1. コード内でデータをどのくらいの頻度で使用しますか?
  2. データは変更されることがありますか (変更されても気にしますか)?
  3. データを再度取得するのにかかる相対 (時間) コストは、コードが実行する他のすべての処理と比較してどれくらいですか?
  4. どのくらいの価値を置きますか パフォーマンス, 、 対 開発者の労力/時間 (この特定のアプリケーションの場合)?

原則として:データが頻繁に変更されない運用アプリケーションの場合は、おそらく DataTable を一度作成してから、おっしゃるように参照を保持すると思います。また、コンパイラに入力ミスを見つけてもらいやすくするため、汎用の DataTable クラスではなく、型指定されたコレクション/リスト/辞書にデータを配置することも検討します。

自分で実行する、「開始して処理を実行して終了する」という単純なユーティリティの場合、おそらく労力を費やす価値はありません。

Windows CE についての質問です。この特別な注意では、クエリを 1 回だけ実行し、結果を保持する可能性が高くなります。モバイル OS には、デスクトップ ソフトウェアにはないバッテリーとスペースに関する追加の制約があります。基本的に、モバイル OS では 4 番目の重要性がさらに高まります。

SQL から別の取得呼び出しを追加するたびに、外部ライブラリへの呼び出しの頻度が高くなります。これは、おそらく実行時間が長くなり、より頻繁にメモリの割り当てと解放が行われ (断片化が増加します)、データベースの再読み取りが発生する可能性があることを意味します。フラッシュメモリー。データを取得したら、それができると仮定して、保持しておくほうがはるかに良いでしょう (箇条書き #2 を参照)。

データセットをデータの「セッション」と考えると、この質問に対する答えを見つけやすくなります。データセットを入力します。あなたは彼らと一緒に働きます。完了したらデータを元に戻すか破棄します。したがって、次のような質問をする必要があります。

  1. データはどれくらい最新のものである必要がありますか? 常に最新のものを使用する必要がありますか? それともデータベースはそれほど頻繁には変更されませんか?
  2. データを何に使用するのですか? レポートに使用するだけの場合は、データセットを簡単に入力してレポートを実行し、その後データセットを破棄し、次回は新しいデータセットを作成するだけです。とにかく、より多くの最新データが得られます。
  3. いったいどれくらいのデータのことを言っているのでしょうか? 比較的小さなデータセットを扱っているため、すべてをメモリにロードしてそこに永久に保持しても、メモリへの大きな影響はないとのことです。

大量のデータを持たないシングルユーザー アプリであるとのことなので、最初にすべてを読み込んでデータセットで使用し、閉じるときに更新するのが安全だと思います。

このシナリオで考慮する必要がある主な点は次のとおりです。クラッシュや停電などによりアプリが異常終了した場合はどうなりますか?ユーザーはすべての作業を失うことになりますか?ただし、実際には、データセットのシリアル化は非常に簡単なので、ユーザーが多くの作業を失わないようにするために、データセットの内容をディスクにシリアル化する「頻繁に保存」手順をかなり簡単に実装できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top