Jim*_*Del 0 c# foreach loops class
我的下面的代码有效,但我担心它的不良做法或可能导致内存问题.但凭借我有限的知识,这是我发现的最佳方式.可以做得更好吗?
谢谢
static void Main()
{
// Directory of files.
const string dir = @"C:\Test";
// File names.
string[] fns = Directory.GetFiles(dir);
// Order by size.
var sort = from fn in fns
orderby new FileInfo(fn).Length descending
select fn;
// List files.
foreach (string n in sort)
{
Console.Write(n);
Console.Write(" ");
FileInfo f = new FileInfo(n);
long file = f.Length;
Console.WriteLine(file);
}
Console.ReadLine();
}
Run Code Online (Sandbox Code Playgroud)
我发现FileInfo你的实例化没有问题.它看起来像一个托管对象.让垃圾收集者担心它.
现在FileStream您可能使用或不使用的对象FileInfo应为closed.一份using声明将在这方面为你做繁重的工作
实例化FileInfo实例不是问题.它是一个没有实现的托管对象,IDisposable这意味着垃圾收集器应该能够很好地清理所有内容.
我看到的问题是你要为每个文件创建两个实例(一个在LINQ查询中,另一个在你的循环中).为什么不修改您的查询,以便您只需要一次实例化:
var sortedFiles = fns.Select(fn => new FileInfo(fn))
.OrderBy(f => f.Length);
foreach(var file in sortedFiles)
{
Console.Write(file.Name);
Console.Write(" ");
Console.WriteLine(file.Length);
}
Run Code Online (Sandbox Code Playgroud)