调用 toList() 时是否会影响性能?
是的当然。从理论上讲,它甚至i++
会对性能产生影响,它会使程序减慢几个滴答声。
做什么.ToList
?
当您调用.ToList
时,代码会调用Enumerable.ToList()
一个扩展方法,即return new List<TSource>(source)
. 在对应的构造函数中,最坏的情况下,它会遍历item container,将它们一个一个添加到一个新的容器中。所以它的行为对性能影响很小。成为应用程序的性能瓶颈是不可能的。
问题中的代码有什么问题
Directory.GetFiles
遍历文件夹并将所有文件的名称立即返回到内存中,字符串 [] 可能会占用大量内存,从而减慢一切速度。
那应该怎么办
这取决于。如果您(以及您的业务逻辑)保证文件夹中的文件量总是很小,那么代码是可以接受的。但仍然建议使用惰性版本:Directory.EnumerateFiles
在 C#4 中。这更像是一个查询,不会立即执行,您可以在其上添加更多查询,例如:
Directory.EnumerateFiles(myPath).Any(s => s.Contains("myfile"))
一旦找到名称包含“myfile”的文件,它将停止搜索路径。这显然是有更好的表现呢.GetFiles
。