0

こんにちはすべて私は奇妙な最適化の質問があります、これは私が簡単にするためにいくつかの名前を変更したコードです

CollectionObject mycollobj = new CollectionObject();
List<string> MyProducts = new List<string>();
//get collection of selected customers that were passed in
var chckedValues = form.GetValues("assignChkBx");
foreach(string customer in chckedValues )
{
    MyProducts.Clear();
    //MyProducts is then set to a data access method in my data access class
    MyProducts = DataLayerClass.GetProductsFromCustomer(customer);
    foreach(string product in MyProducts)
    {
       string item1 = DataLayerClass.GetItem1(product);
       string item2 = DataLayerClass.GetItem2(product);
       mycollobj.loaditems(item1, item2);
    }
}

基本的に、mycollobjは、かなり複雑な分析(私が制御できない)に使用されるブラックボックスです。このネストされたアルゴリズムを実行するためのより良い方法はありますか?どんな提案も大切にされており、何か説明が必要かどうか尋ねてください。ありがとう!

4

1 に答える 1

3

はい、この行:MyProducts = DataLayerClass.GetProductsFromCustomer(customer);処理が遅くなります (すべての顧客に対するデータベース呼び出し)。また、入れ子DataLayerClass.GetItem1()/GetItem2になっていると事態がさら​​に悪化します。代わりに、すべてをデータベースに送信し、顧客と含まれるandを含むcheckedValuesLookup を返します。Tupleitem1item2

ILookup<Customer, Tuple<string, string>> customerProducts = 
 DataLayerClass.GetCustomersWithProducts(chckedValues);

簡単に言えば、ロジックを単一のデータベース クエリに移動します。

于 2012-10-04T20:13:02.910 に答える