方法C#中的本地字符串数组的空闲内存

时间:2013-09-21 04:24:54

标签: c# arrays string memory

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

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 []行)中读取的字符串数组的内存。我如何释放它,因为它以后从未使用过。

1 个答案:

答案 0 :(得分:1)

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

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

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