有一个容器A 启动一个线程T1不停的往A里面加数据  另外在启动一个线程T2不停的将A里面的数据放到新建的容器B(每次都新建)里面,然后将容器A清空,但是T2的速度没有T1快导致容器A超极限内存溢出,有什么办法可以处理。
 static void Thread1()
        {
            while (true)
            {
                //lock(_LsInt)
                //{
      
                _LsInt.Add(1);                //}
            }        }
        static void Thread2()
        {
            while (true)
            {
                List<int> lse = new List<int>();
                lse.AddRange(_LsInt.ToArray());
                _LsInt.Clear();
            }  
        }

解决方案 »

  1.   

    本帖最后由 bdmh 于 2012-07-31 09:52:10 编辑
      

  2.   

    这个的确不好解决,尤其是大数据量的时候,抛出outofmemery异常了哎! 歧视我是想问,Socket接受数据,缓冲区如何设置,我是用list作为一个中间缓存的存储单元。不知道大家在大数据量Socket写入和读取一个“缓冲区方面是如何设计的”。如何保证不丢数据! 
      

  3.   

    这个问题是典型的信号量同步问题,应该使用Semaphore对象,可以实现完美的控制缓冲区大小,Semaphore的并发数量设置为缓冲区最大的大小,T1对Semaphore进行WaitOne操作,表示申请一个缓冲区位置存放结果,T2对Semaphore对象进行Release操作,表示已经取走一个缓冲区数据,释放一个空闲的缓冲区位置,就可以把缓冲区大小限制在设定数值,
      

  4.   

    楼主可以参考一下线程同步问题,和信号量Semaphore,百度一下这两个关键词,你就会发现有一套严密成熟的理论完美解决这个问题,