linq / lambda表达式的性能调优

时间:2012-05-02 09:27:32

标签: c# performance lambda performance-testing

我有一些代码如下所示。

string result = listDetails
    .Where(filename => filename.Contains(fullname)).FirstOrDefault().Split('\\')
    .Where(name => name.Contains(nameGivenToSearch)).FirstOrDefault();

if (result.Contains("sd"))
    // Do something

在运行检查性能的工具时,它会在上面的语句中显示性能警告。

我想让这个性能更可行。我听说嵌套的lambda表达式执行速度较慢。

请提出建议,以解决此问题或任何有助于解决问题的链接。

3 个答案:

答案 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.GetDirectoryNamePath.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