2008-09-17 12 views
2

私は、レガシー(まだオブジェクト指向の)開発ツールで経験豊富なプログラマーで、C#/ .Netへの切り替えを行っています。私はSQLサーバーCE 3.5を使用して、小さな単一のユーザーのアプリケーションを書いています。私は概念的なDataSetと関連するドキュメントと私のコードの作品を​​読んだ。C#アプリケーションで使用するDataTableオブジェクトの数はいくつですか?

は、今私は、私は「右」それをやっていることを確認するには、経験豊富な.NET/SQL Serverのコーダからいくつかのフィードバック、あなたはドキュメントを読んでから取得しない種類を取得。

私はいくつかの場所でこのようなコードを持っていることに気付きました:シングルユーザーアプリで

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

... // other code 

、アプリの起動時に、通常、一度だけこれを行うだろう、それぞれのDataTableオブジェクトをインスタンス化テーブルを作成し、refを格納して、すでにデータで満たされているその単一のオブジェクトを使用します。この方法では、潜在的に複数回ではなく、一度だけdbからデータを読み込みます。または、このオーバーヘッドはそれほど小さくないので、問題はありません(大きなテーブルでは逆効果になる可能性があります)。

+0

.NETに移行する場合は、ADOをスキップしてLinqを見てみることをお勧めします。 – Will

+0

あなたは私のアプリケーション全体のデータプロバイダとしてLINQを使うことができますか? – Dennis

+0

LINQを使用して、DataSetsおよびTableAdapatersを使用せずにデータを取得し、結果に対してバインドすることができます。そのはるかにスムーズなワークフロー、IMHO。 – Will

答えて

3

CEの場合は、おそらく問題ありません。あなたが何千人ものユーザーにこのアプリをプッシュしていて、集中しているDBにぶつかっていたら、最適化に時間を費やしたいかもしれません。 CEのようなシングルユーザーのインスタンスDBでは、最適化が必要なデータがない限り、私はそれについて心配する必要はありません。あなたがconstantyデータを使用している場合は時期尚早の最適化など

0

2主ないくつかのこと 1の間varysを決定する方法があることを行ったデータですが、データ

がたくさんある絶えず 2.アクセス最初の使用時にそれらをロードします。 データを時折しか使用しない場合は、必要に応じてテーブルを記入して廃棄してください。例えば

、あなたは10のGUI画面を持っており、それだけで、画面上だけでそれを読んで、そのうちの1にmyTableDataTableを使用している場合。

0

本当はC#自体に依存しません。

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

原則として、データが頻繁に変更されないプロダクションアプリケーションの場合、DataTableを一度作成してから、言及したように参照を保持することになります。また、コンパイラに入力ミスを受けさせるのが簡単であるため、汎用のDataTableクラスではなく、型指定されたコレクション/リスト/ディクショナリにデータを配置することも検討します。 「開始は、その事と終了を行います」、それはおそらく努力する価値はないことをあなた自身のために実行する簡単なユーティリティについては

Windows CEについて質問しています。その特別な注意を払って、私はたぶんクエリを一度しか実行せず、結果を保持する可能性が高いです。モバイルOSは、デスクトップソフトウェアにはないバッテリやスペースに余分な制約があります。基本的に、モバイルOSは#4弾をより重要にします。

SQLから別の検索呼び出しを追加するたびに、外部ライブラリへの呼び出しが頻繁に行われるため、おそらく長く実行されていることが多く、メモリの割り当てと解放が頻繁になり(フラグメンテーションが追加される)、データベースがフラッシュメモリから再読み込みします。可能であれば、データを保持しておく方がよいでしょう(箇条書き2を参照)。

0

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

  1. データの最新の状態はどうですか?あなたはいつも最新のものを持っている必要がありますか、それとも頻繁にデータベースを変更しないのですか?
  2. あなたは何のためにデータを使用していますか?レポート用に使用しているのであれば、簡単にデータセットを記入してレポートを実行し、データセットを離れて投げて、次に新しいセットを作成することができます。とにかくそれはあなたにもっと最新のデータを与えるでしょう。
  3. 私たちが話しているデータの量はどれくらいですか?あなたは比較的小さなデータセットで作業していると言いました。メモリにすべてをロードして永遠に保持すると、大きなメモリへの影響はありません。

大量のデータがないシングルユーザーのアプリだと言えば、最初はすべてのデータを読み込み、データセットで使用して閉じても安全です。

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

関連する問題