具体代码很短.
===================================
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            for (int j = 0; j < 20000; j++)//创建20000个对象
            {
                List<int> obj_list = new List<int>();
                for (int i = 1; i < 3000; i++)//创建一个list对象
                {
                    obj_list.Add(i);
                }
                string path = @"D:\c#\ConsoleApplication2\cache\" + j;//保存的路径
                using (FileStream fs = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.ReadWrite))
                {
                    BinaryFormatter formatter = new BinaryFormatter();
                    formatter.Serialize(fs, obj_list);//序列化保存在硬盘上
                }
                if (j % 300==0)//每300次输出一下
                {
                    Console.WriteLine(j);
                }
            }
        }
    }
}
===========================================
问题来了,这个程序执行的时候,该进程占了15mb内存(基本固定不变),然后随着程序一直执行,系统占用内存不断增加.
然后把程序关了.系统就释放了15mb内存.还有1大块内存被无缘无故吃了.然后到D:\c#\ConsoleApplication2\cache\ 下执行 del *.*
删除文件时,系统占用内存不断减少.随着文件被删完,内存不断的释放出来了?怎么回事?

解决方案 »

  1.   

    试一下这样
                    FileStream fs = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.ReadWrite));
                    BinaryFormatter formatter = new BinaryFormatter();
                    formatter.Serialize(fs, obj_list);//序列化保存在硬盘上
                    fs.Close();
                    fs.Dispose();
      

  2.   

    我为每个用户保存一个List<int>,有40w以上的用户.
    怎么减少循环呢?
      

  3.   

    内存保存的是Page File 虚拟内存的文件。你的fs.close 要加上的话内存会释放,虚拟内存是用的时候才删的。