多线程引发OutOfMemoryException

现象:

内存是绝对没有问题的,3g内存,发生异常时,任务管理器里显示,可用内存还有1G多!不知道什么原因!

int i=0;
while ((i++) < 2000)
            {
                try
                {
                    Thread t = new Thread(Test);
                    t.IsBackground = true;
                    t.Start();
                }
                catch (Exception ex)
                {
                    MessageBox.Show("current loop: " + i.ToString() + "\r\n" + ex.ToString());
                    break;
                }
            }

void Test()
        {
            Thread.Sleep(120 * 1000);
        }

  当线程加到1305时就会报OutOfMemoryException异常。

解决:

 .net默认为每个线程分配的椎大小是1m,当启动1305个线程时,光是启动线程就占用1305*1m的内存

//把椎大小由1m改为512K
Thread t = new Thread(Test, 1024 * 512);
                    t.IsBackground = true;
                    t.Start();

  

经过上面改动后,可以启动2602个线程.

多线程引发OutOfMemoryException

时间: 2024-10-16 06:03:11

多线程引发OutOfMemoryException的相关文章

C# 多线程(二) 线程同步基础

本系列的第一篇简单介绍了线程的概念以及对线程的一些简单的操作,从这一篇开始讲解线程同步,线程同步是多线程技术的难点.线程同步基础由以下几个部分内容组成 1.同步要领(Synchronization Essentials) 2.锁(Locking) 3.线程安全(Thread Safety) 4.事件等待句柄(Signaling with Event Wait Handles) 5.同步上下文(Synchronization Contexts) 同步要领(Synchronization Essen

C# 多线程(二) 线程同步基础(上)

本系列的第一篇简单介绍了线程的概念以及对线程的一些简单的操作,从这一篇开始讲解线程同步,线程同步是多线程技术的难点.线程同步基础由以下几个部分内容组成 1.同步要领(Synchronization Essentials) 2.锁(Locking) 3.线程安全(Thread Safety) 4.事件等待句柄(Signaling with Event Wait Handles) 5.同步上下文(Synchronization Contexts) 同步要领(Synchronization Essen

System.OutOfMemoryException: 内存不足。(转)

主要是网站生成水印图片的时候遇到的 原文地址:http://www.cnblogs.com/longgel/archive/2010/03/24/1693776.html 今天调试asp.net 程序的时候,报出 “System.OutOfMemoryException: 内存不足”的异常,刚开始真让我纳闷,我以为真是的内存不足,还去查看内存占用情况,逛晕.网上一搜,发现是引用的图片无法生成对象造成的,哎.真把我还为难了一把. 网上也有很多人都碰到过这样的的问题,我也把这个问题记录下来,以便日后

.Net 内存溢出(System.OutOfMemoryException)

.Net 内存溢出(System.OutOfMemoryException) 在什么情况下会出现OutOfMemonryException呢? 在我们试图新建一个对象时,而垃圾收集器又找不到任何可用内存时被抛出,这种情况下我们是可以捕获该异常的; 另一种情况是,CLR需要内存时,而却系统却不能提供,也会抛出该异常. 但此时,我们的应用程序是不能捕获该错误的. 内存溢出(OutOfMemoryException)的调试分析 32位操作系统的寻址空间是4G,其中有2G被操作系统占用,也就是说留给用户

有关多线程程序开发

多线程程序设计的困难 难以重现失败,bug难以追踪 并发错误难以追踪和消除 独立任务的拆分并不总是那么明朗 线程同步.通信引入的复杂 多线程引发的竞争.死锁.可见性问题(难以调试.追踪) 测试困难,简单的测试并不能覆盖生产环境的问题 设计不当,并不能充分提升性能(不控制线程数量,造成无谓上下文切换和Cache失效) 多线程引入的开销 上下文切换[包括Cache] 内存同步/Memory Barrier[java中的synchronized 和 volatile] 锁 内存开销 多线程程序优化 线

.Net 内存溢出(System.OutOfMemoryException)的常见情况和处理方式总结

.Net 内存溢出(System.OutOfMemoryException)的常见情况和处理方式总结 在什么情况下会出现OutOfMemonryException呢? 在我们试图新建一个对象时,而垃圾收集器又找不到任何可用内存时被抛出,这种情况下我们是可以捕获该异常的; 另一种情况是,CLR需要内存时,而却系统却不能提供,也会抛出该异常. 但此时,我们的应用程序是不能捕获该错误的. 内存溢出(OutOfMemoryException)的调试分析 32位操作系统的寻址空间是4G,其中有2G被操作系

ASP.NET中出现内存溢出错误System.OutOfMemoryException

原因1:数据库服务器性能问题导致内存不够用,从而引起内存溢出 原因2:在IIS的应用程序池中进行配置,引起IIS服务器的内存分配问题,从而引起内存溢出 分析: 32位操作系统的寻址空间是4G,其中有2G被操作系统占用,留给用户进程的内存只有2G(扣除程序加载时映像占用的部分空间,一般只有1.6G~1.8G左右可以使用). 如果进程运行中需要申请内存,而操作系统无法为其分配内存空间,则会产生内存不足的异常,在.net中为System.OutOfMemoryException(The excepti

一次排查多线程问题的记录

最近遇到一个导出pdf报文件不存在的异常,查看代码后,发现导出pdf需经四个步骤:生成临时pdf.填充pdf内容.下载至客户端.删除pdf.报文件不存在异常的代码定位到下载至客户端这个步骤.于是,就有了一个猜想:多线程引发的问题. 猜测导致这个异常的具体行为是A和B都要导出这个pdf,但是B比A晚一点,结果A正常导出了,B在下载至客户端这个步骤的时候,发现这个pdf文件已经被A导出的线程删除了,于是就会报文件不存在的异常. 为了证实这个猜想,使用jmeter测试工具模拟六个用户同时100次请求的

设计模式学习第一天:23种设计模式(全)

C#常见的设计模式 一.概要: 模式分为三种,设计模式.体系结构模式与惯用法.其中惯用法是一种语言紧密相关的模式,例如,定界加锁模式其实是一种惯用法. 在C#项目开发过程中,很多情况下您已经使用了某些模式,但或许您并不知道自己所使用的这种解决方案是一种已经被总结归纳的模式. 工厂.策略.桥接.模板方法.代理等等23种Gof经典模式是属于设计模式,设计模式的粒度相对较小,基本上用于提高模块内部的可扩展性和可维护性需求 三层.MVC.IoC/DI等属于体系结构模式,粒度比设计模式大,它是从项目的整体