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也使事情变得更糟。而是将所有内容发送checkedValues到数据库并返回带有客户的查找和Tuple包含的item1item2

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

简而言之,将逻辑移至单个数据库查询。

于 2012-10-04T20:13:02.910 回答