1

我最近遇到了一个关于我的程序使用的内存的问题。原因是我在方法中使用的字符串数组的内存。更具体地说,这个程序是从外部文件中读取一个整数数组。这是我的代码

class Program
{

    static void Main(string[] args)
    {
        int[] a = loadData();
        for (int i = 0; i < a.Length; i++)
        {
            Console.WriteLine(a[i]);
        }
        Console.ReadKey();
    }

    private static int[] loadData()
    {
        string[] lines = System.IO.File.ReadAllLines(@"F:\data.txt");
        int[] a = new int[lines.Length];
        for (int i = 0; i < lines.Length; i++)
        {
            string[] temp = lines[i].Split(new char[]{','},StringSplitOptions.RemoveEmptyEntries);
            a[i] = Convert.ToInt32(temp[0]);
        }
        return a;
    }
}

文件 data.txt 大约 7.4 MB 和 574285 行。但是当我运行时,任务管理器中显示的程序内存为:41.6 MB。似乎我在 loadData() 中读取的字符串数组的内存(它是 string[] 行)没有被释放。我怎样才能释放它,因为它以后再也不用了。

4

1 回答 1

1

您可以在将行设置为 null 后调用 GC.Collect(),但我建议您在此处此处此处查看所有答案。调用 GC.Collect() 是您很少想做的事情。使用诸如 C# 之类的语言的目的是它为您管理内存。如果您想对读入的内存进行精细控制,那么您可以创建一个 C++ dll 并从您的 C# 代码中调用它。

您可以逐行读取它并在该行上执行您需要的操作,而不是将整个文件读入字符串数组。那可能也会更有效率。

40MB 的已用内存会导致什么问题?您多久阅读一次数据?是否值得缓存它以备将来使用(假设 7MB 是可以容忍的)。

于 2013-09-21T04:33:56.963 回答