我有一些代码如下所示。
string result = listDetails
.Where(filename => filename.Contains(fullname)).FirstOrDefault().Split('\\')
.Where(name => name.Contains(nameGivenToSearch)).FirstOrDefault();
if (result.Contains("sd"))
// Do something
在运行检查性能的工具时,它会在上面的语句中显示性能警告。
我想让这个性能更可行。我听说嵌套的lambda表达式执行速度较慢。
请提出建议,以解决此问题或任何有助于解决问题的链接。
答案 0 :(得分:0)
尝试将搜索到的数据(或应用程序启动之前的所有数据)缓存到Dictionary<,>。
答案 1 :(得分:0)
我会把它重写为:
string result = listDetails.FirstOrDefault(filename => filename.Contains(fullname));
if (result != null)
result = result.Split('\\').FirstOrDefault(name => name.Contains(namegiventosearch));
if (result != null && result.Contains("sd"))
{
//do task
}
我认为性能改善的空间不大。
答案 2 :(得分:0)
如果我的假设是正确的,列表包含文件的路径,我认为主要问题是你拆分路径以获取文件名。请改用函数Path.GetDirectoryName
和Path.GetFileName
。搜索最多1000个字符串条目的列表不应该是处理器重
if (listDetails.Where(x => { if(Path.GetDirectoryName(x).Contains(fullname))
{
var file = Path.GetFileName(x);
return file.Contains(namegiventosearch) && file.Contains("sd");
}
else
{
return false;
}
}).FirstOrDefault() != null)
{
// do Task
}
enter code here