【发布时间】:2018-01-26 22:06:25
【问题描述】:
我有一个非常简单的方法来比较两个列表,然后将值从第一个列表分配给第二个,如下所示:
private void FindUPC(List<ResultItem> filteredProducts, List<zsp_select_UserItems_Result> items)
{
foreach (var item in items)
{
foreach (var trItem in filteredProducts)
{
if (item.ItemID == trItem.ID)
{
trItem.UPC = item.UPC;
trItem.EAN = item.EAN;
trItem.MPN = item.MPN;
}
}
}
}
但是,当在大型集合上执行此操作时,例如比较集合,其中每个列表包含 50000 个项目,此处所需的执行时间是惊人的 30000 毫秒(30 秒)......这会影响性能太可怕了,所以我想知道比较两个列表然后分配值的最快方法是什么,就像我在之前编写的示例中显示的那样?
谁能帮帮我?
附:伙计们,我可以为此使用 IEqualityComparer 吗?
@Stephen 你的意思是这样的吗:
private void FindUPC(List<ResultItem> filteredProducts, List<zsp_select_UserItems_Result> items)
{
foreach (var item in items)
{
foreach (var trItem in filteredProducts)
{
if (item.ItemID == trItem.ID)
{
trItem.UPC = item.UPC;
trItem.EAN = item.EAN;
trItem.MPN = item.MPN;
}
break;
}
}
}
【问题讨论】:
-
有人吗? =) =)
-
那么您将需要使用具有恒定查找时间的东西。例如字典。
-
如果两个列表都包含那么多记录,那么您可能需要重新考虑您的算法,或者实际上重新考虑为什么您认为需要这种比较...我不确定您的方法名称是否正确或者,它的功能真的不是
findUPC,它类似于MutateFilteredProductsWithMachingUPC。这不应该是数据库应该做的事情吗? -
您的列表
filteredProducts是否实际上在更多用户之间共享,就我个人而言,我认为没有足够的信息来提供好的建议,除了您应该重新考虑为什么要在一个网站中拥有这么多产品列表,以及为什么要通过 for 循环对其进行变异 -
那个用户需要每个列表一次有 50000 条记录?你怎样才能对这个逻辑做出有意义的表示?
标签: c# asp.net asp.net-mvc performance list