-2

我有如下代码行。

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

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

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

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

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

4

3 回答 3

0

Try caching the data searched (or all of it, before your app starts) into the Dictionary<,>.

于 2012-05-02T09:44:36.313 回答
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
于 2012-05-02T11:11:51.663 回答
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
}

我认为性能提升空间不大。

于 2012-05-02T10:46:25.360 回答