2

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

ここで、「正しく」実行していることを確認したいと思います。経験豊富な .Net/SQL Server コーダーから、ドキュメントを読んでも得られない種類のフィードバックを得たいと思います。

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

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

... // other code

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

4

4 に答える 4

3

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

于 2008-09-17T20:50:33.267 に答える
0

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

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

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

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

于 2008-09-18T02:05:22.217 に答える
0

決定する方法は、主に 2 つのいくつかの事柄の間で異なります。

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

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

于 2008-09-17T20:55:46.267 に答える
0

選択は実際には C# 自体には依存しません。それは、次のバランスに帰着します。

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

原則として、データが頻繁に変更されない本番アプリケーションの場合、おそらく DataTable を一度作成してから、あなたが言及したように参照を保持します。コンパイラに入力ミスをキャッチさせる方が簡単なので、ジェネリック DataTable クラスの代わりに、型指定されたコレクション/リスト/ディクショナリにデータを配置することも検討します。

自分で実行する「開始、実行、終了」する単純なユーティリティの場合、おそらく努力する価値はありません。

Windows CE についてお尋ねします。その特定の注意では、クエリを 1 回だけ実行し、結果を保持する可能性が最も高いでしょう。モバイル OS には、デスクトップ ソフトウェアにはないバッテリとスペースの制約があります。基本的に、モバイル OS では 4 番目の項目がより重要になります。

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

于 2008-09-17T21:01:48.637 に答える