1

国がメソッドに送信され、メソッドが大陸を返すようにします。私が設定している現在の方法は、これに似た switch ステートメントです。このメソッドは、数千回呼び出すことができます。

 private string changeCountry(string country)
 {   
     switch (country)
     {
        case "Ireland":  return "Europe";
        case "England":  return "Europe";
        case "France":   return "Europe";      
        case "Brazil":   return "America";
        case "Chile":    return "America";
     }
 }

問題は、国と大陸を動的に追加および削除できるようにする必要があることです。この方法では、国または大陸を追加するときにコードを再コンパイルする必要があります。

私が考えていた解決策は、簡単に追加できる国と大陸の2つの列を持つデータベーステーブルを用意し、代わりに数千回呼び出されるこのようなものを用意することでした。

 private string changeCountry(string country)
 {   
     // open db connection
     // Select continent where country = 'country'
     // close db connection
     return continent;
 }

これは良い方法ですか、それとも誰かがより良い方法を提案できますか? 処理時間についてはあまり心配していませんが、処理に膨大な時間を費やしたくありません。より良い解決策を見落としていないかどうかを知りたい

4

5 に答える 5

2

3 つのステップで:

1)あなたが話したテーブルを持っています:国と大陸、外部キー制約付き(国は大陸にある必要があります)。

2) そのデータが初めて必要になったときは、そのすべてを にロードしますDictionary<string, List<string>>。キーは大陸名、値はそれに関連付けられた国のリストです。
後続の呼び出しはこれを再度ロードせず、その辞書を再利用します。

Con3)特定の国の大陸が必要な場合は、次のCouことができます。

string Con = myDictOfCountriesToContinent.FirstOrDefault(kv => kv.Value.Contains(Cou));

その後、DB に任意の数の国と大陸を追加できます。コードはその情報を利用できます。

DBに存在しない国を要求すると、3)のクエリはnullを返しますので注意してください。適宜確認してください。

パフォーマンスに関しては、辞書は非常に優れており、数千回は問題になりません。
コストがかかるのはDBへの往復で、せいぜい1回です。

速度を上げるために、単一の大陸に重複する国がない場合は、List<string>を に置き換えることができます。HashSet<string>

于 2012-07-26T09:55:31.877 に答える
0

誰かがこれを Web サービスとして提供しているかどうかを確認したい場合を除き、データベースは問題なく機能します。

複数の選択による速度の低下が心配な場合は、次のいずれかを実行できます。

  1. データベースからすべてを 1 回ダウンロードします。それを (リスト、辞書などとして) メモリに入れ、頻繁にすべてを更新します。

  2. mysqlを使用している場合-上記ですが、MEMORYテーブルに入れます。この方法でも SQL コードを使用でき、パフォーマンスはそれほど悪くはありません。

(追加: 明確にするために 2 - そのテーブルに永続データを置かないでください。コピーしてキャッシュとして使用してください。データベースがダウンすると、メモリ テーブルの内容は失われます)

于 2012-07-26T09:55:41.260 に答える
0

コンテンツが動的である場合、データをハードコーディングすることはできません。データベースに数千回クエリを実行しても、パフォーマンスに影響があるとは思いません。

しかし、これらの数千のリクエストの頻度はどれくらいですか?

于 2012-07-26T09:50:43.637 に答える
0

メンテナンスの観点から、データベースにルックアップ テーブルを作成し、これを使用して結果を取得することをお勧めします。

別の解決策は、構成ファイルで各国のキーを宣言し、大陸が固定されているため、大陸の列挙型を作成することです。これらのデータを使用して、国の大陸を取得します。新しい国を追加したい場合は、構成に追加するだけで、再コンパイルは必要ありません。

于 2012-07-26T09:50:43.527 に答える
-1

辞書を使う:

Dictionary countryContinents = new Dictionary<string,string>();

//add items
countryContinents.Add("Ireland","Europe");

//retrieving
string continent = countryContinents["Ireland"];
//continent equals Europe

アイテムが存在しない可能性があり、これを確認できます。

string continent;
if (countryContinents.TryGetValue("Ireland", out continent))
{
    //continent equals Europe
}

「再コンパイルなし」の要件については、この辞書をファイルに書き込み、実行時 (アプリケーションの起動時) に読み込むことができます。辞書を変更したとき、またはアプリケーションを終了したときに、ファイルに書き込みます。

http://blogs.msdn.com/b/adam/archive/2010/09/10/how-to-serialize-a-dictionary-or-hashtable-in-c.aspx

于 2012-07-26T09:48:21.460 に答える