你这个List不是单例哦。删除后,确保没有别的地方引用了的话,也只是告诉系统我不需要这个字符串了。
垃圾收集器会在适当的时机进行收集。可以强制调用垃圾收集,通过:GC.Collect();

解决方案 »

  1.   

    GC应该不行...
    http://www.cnblogs.com/cadlife/articles/2264613.html看看这个...可以解决的.
      

  2.   

     
    //内存不回收,在2代才回收
    class Program
        {
            static void Main(string[] args)
            {
                Console.WriteLine("静态单例当前对像代数为:" + GC.GetGeneration(Class1.Instance));
                Console.ReadKey();
                Console.WriteLine("添加100万次");
                add();
                Console.WriteLine("静态单例当前对像代数为:" + GC.GetGeneration(Class1.Instance));            Console.WriteLine("任意键继续");
                Console.ReadKey();            Console.WriteLine("删除100万次");
                Remove();
                //Console.WriteLine("静态单例当前对像代数为:" + GC.GetGeneration(Class1.Instance));
                //Console.ReadKey();
                //GC.Collect(0);
                //Console.WriteLine("回收0代" + System.Diagnostics.Process.GetCurrentProcess().PrivateMemorySize64 / 1024 / 1024);            //Console.ReadKey();
                //GC.Collect(1);
                //Console.WriteLine("回收1代" + System.Diagnostics.Process.GetCurrentProcess().PrivateMemorySize64 / 1024 / 1024);
                //Console.ReadKey();
                //GC.Collect(2);
                //Console.WriteLine("回收2代" + System.Diagnostics.Process.GetCurrentProcess().PrivateMemorySize64 / 1024 / 1024);            Console.ReadKey();        }        private static void add()
            {
                var each = System.Linq.Enumerable.Range(1, 100 * 10000).ToList();
                each.ForEach((o) =>
                                 {
                                     Class1.Instance.Objs.Add(Guid.NewGuid().ToString());                             });
            }
            public static int  GetCount(int leng,int sp=5000)
            {
                var lon = leng / (double)sp;
                if(Math.Floor(lon)<lon)
                {
                    return (int)Math.Floor(lon) + 1;
                }
                else
                {
                    return (int) Math.Floor(lon);
                }
            }        private static void Remove()
            {
                Class1.Instance.Objs.Clear();        }