我的一个C#程序,需要刚开始分配内存来存放数据我的程序是使用定时器每隔一秒种就创建一个对象,我这里创建了stringbuilder对象,new stringbuiler(100);可是每当查看任务管理器里面程序所占的内存到了11700K 的时候程序就停止不动了,大概就是创建了30个对象把,
如果把每个stringbuiler对象定义的大点,创建的对象会更少,但是看任务管理器里面程序所占的内存还是到了11700K 就会停住不是何故,刚用C#,不理解 ,请达人指教其中缘由。

解决方案 »

  1.   

    using System;
    using System.Text;
    using System.Threading;
    using System.Collections;namespace MyApp
    {
        /// <summary>
        /// 应用程序类。
        /// </summary>
        public class Program
        {
            static void Main()
            {
                Console.WriteLine("Press Enter to terminate...");
                Worker aWorker = new Worker();
                aWorker.Start();
                Console.ReadLine();
            }
        }    /// <summary>
        /// 工作者类。
        /// </summary>
    public class Worker
    {
    public Worker()
    {
    }        int _objectCount = 0;
            int _doCount = 1;        ArrayList _list = new ArrayList();        public void Do(object obj)
            {
                Console.WriteLine(_doCount.ToString() + ",At [" + DateTime.Now.Ticks.ToString() + "] 采集到数据。");
                for(int i = 0; i < 3; i++)
                {
                    Console.WriteLine("\t\t第 " + (_objectCount + 1).ToString() + " 个对象准备创建。");
                    StringBuilder sb = new StringBuilder(10000);
                    _list.Add(sb);
                    ++ _objectCount;
                    Console.WriteLine("\t\t第 " + _objectCount.ToString() + " 个对象创建成功。");
                }            Console.WriteLine(_doCount.ToString() + ",结束。\n");
                _doCount ++;
            }        public void Start()
            {
                #region 不使用定时器
    //            while(true)
    //            {
    //                Do(null);
    //            }
                #endregion            #region 启用定时器
                TimerCallback callback = new TimerCallback(Do);
                Timer timer = new Timer(callback, null, 0, 500);
                #endregion
            } }
    }
      

  2.   

    程序贴出来看看,我的程序经常用到StringBuilder,业务逻辑各有差异,我这里基本上用完后都清空,大多都共享少量的StringBuilder来操作(一般1,2个)
      

  3.   

    你管内存大小干什么?内存就算不够也还有虚拟内存,你只要关心new出来的对象是否正常可用就行了。
      

  4.   

    问题已经解决 
    是timer被系统当场垃圾回收了
    因为到后面就没有它的引用了 谢谢各位