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);
}
Run Code Online (Sandbox Code Playgroud)
在 中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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
135 次 |
| 最近记录: |