![]() |
1
2
首先,循环中的循环是一件非常糟糕的事情,你应该重构它,使之成为一个单一的循环。这应该不是问题,因为
第二,线
那会节省你很多时间 |
![]() |
2
0
在第一个foreach循环之前,请尝试以下操作:
|
![]() |
3
0
为了帮助您更好地理解EF在幕后运行的是什么,添加一些登录以公开正在运行的SQL,这可能有助于您了解查询是如何/在哪里出错的。这对于确定查询是否经常访问数据库非常有帮助。作为一个非常普遍的规则,您希望尽可能少地点击DB,并通过使用.Select()来减少返回的内容,仅检索所需的信息。日志记录的文档有: http://docs.microsoft.com/en-us/ef/core/miscellaneous/logging 我显然不能测试这个,我有点不确定你的规格去哪里,一旦你有他们,但我想他们成为库存项目的一部分?
对inventoryItems的DB的第一个调用应该产生一个SQL查询,该查询将一次提取构造InventoryItemDto所需的所有信息,从而只对DB进行一次命中。然后,它提取规范并在实现之前使用OrderBy(),这意味着OrderBy将作为SQL查询的一部分而不是在内存中运行。这两个结果都是通过.ToList()实现的,这将导致EF一次性将结果拉入内存。 最后,循环遍历构建的inventoryItems,解析Json,然后根据它过滤规范。我不确定您在哪里使用specDtos,所以我假设它是模型的一部分。我建议您检查您正在进行的Json工作的性能,因为这可能会导致您的速度减慢。 使用Json作为EF模型一部分的一种更为集成的方法可以在以下答案中看到: https://stackoverflow.com/a/51613611/621524 |