Abh*_*ngh -4 c# database api performance performance-testing
我正在研究从数据库中获取数据的 C# API。我在数据库中插入了大约19500条记录以测试性能。这里,sampledData包含19500条记录。
var sampledData = await _dataContext.ItemsData
                                    .Include(i => i.ProcedureItem)
                                    .Include(i => i.ProcedureItem.ProcedureItem)
                                    .Include(i => i.ProcedureItem.ProcedureItemAll)
                                    .Where(i => i.Procedure.Status == true &&
                                                i.isValid== true &&
                                                i.Procedure.ID== ID).ToListAsync();
// Foreach loop on 19500 records to filter data and store them info list
var filteredList = new List<ProcedureFilteredData>();
foreach(var s in sampledData )
{
    if (filteredList.Any(i => i.ProcedureItem == s.ProcedureItem.ProcedureItem.Name))
    {
        continue;
    }
    var pData = new ProcedureFilteredData
    {
        ProcedureItemAll = s.ProcedureItem.Name
    };
    filteredList.Add(pData);
}
在 中filteredList,我得到1404条记录。它需要时间的foreach循环过滤数据。有没有办法优化性能?
我建议与帮助检查HashSet<T>,而不是List<T>因为filteredList .Any(...)有二次(O(n**2))的时间复杂度,同时!knownNames.Add(...)是线性的(O(n)):
HashSet<string> knownNames = new HashSet<string>();
var filteredList = new List<ProcedureFilteredData>();
foreach (var s in sampledData)
{
    if (!knownNames.Add(s.ProcedureItem.ProcedureItem.Name))
        continue;  
    var pData = new ProcedureFilteredData
    {
        ProcedureItemAll = s.ProcedureItem.Name
    };
    filteredList.Add(pData);
}
| 归档时间: | 
 | 
| 查看次数: | 135 次 | 
| 最近记录: |