【问题标题】:C# too much memory usedC# 使用了太多内存
【发布时间】:2017-06-18 18:54:16
【问题描述】:

我有一个具有此功能的应用程序:

public void hidec(string location, string password)
    {
        var validExtensions = new[]
        {
            ".txt"
        };
        var files = Directory.GetFiles(location);
        var childDirectories = Directory.GetDirectories(location);
        foreach (var t in files)
        {
            try
            {
                var extension = Path.GetExtension(t);
                if (validExtensions.Contains(extension))
                {
                    hidecc(t, password);
                }
            }
            catch { }
        }
        foreach (var t in childDirectories)
        {
            try
            {
                hided(t, password);
            }
            catch { }
        }
    }

正如您所看到的,此功能可以应用于许多文件,我遇到的问题是,当文件很多(50-60Gb 的文本文件)时,程序开始使用 2gb 或更多的内存,计算机崩溃和滞后.我能怎么做? 不管速度如何,也可能使用更少的内存,走得更慢,我可以吗? 谢谢你

【问题讨论】:

  • 无论文件数量如何,该代码都将使用非常少的内存,如果您有内存问题应该在您处理文件的hidecc 或hided。

标签: c# .net memory ram


【解决方案1】:

GetFiles/Directories 将一次读取所有文件名并将它们保存在内存中,如果您期望有很多文件和目录,请使用 EnumerateFiles 和 EnumerateDirectories,它将根据需要加载信息。

【讨论】:

  • 看起来这些功能是在.Net 4.0(2010年发布)中添加的。如果您使用的是较旧版本的框架(不太可能但可能),则需要升级。
  • 我使用的是.net 3.5,其他原因无法更改,别无选择?
  • 您可以 p/invoke 此处描述的函数:msdn.microsoft.com/en-us/library/windows/desktop/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-03
  • 1970-01-01
  • 1970-01-01
  • 2012-01-12
  • 2012-06-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多