基础才是重中之重~多线程的代价~我的内存都被吃了!

简介:

异步操作是.net4.5推出的新名词,事实上,这东西早就有了,它归根结底是通过线程池来实现的,即将一个大任务分成多个小任何块,每个线程并行处理其中的一个,完成后再把结果告诉主线程,在.net4.5推出后,这种技术得到了封装,让开发人员实现起来更加方便了,但是,并发(导步,多线程)并不是在哪里都适用的,使用不当,可能出现很多严重的后果!

看我的程序,这家伙已经占到了2.6G的内存空间了,很可怕吧!

出现这种问题的原因就是我没有把线程这东西搞清楚,在一个调用密集的环境里,使用了多线程,要知道,这种线程,线程池里会有N多个线程的,处理的速度我没有觉得提升,反而内存吃的很严重,这个原因就是因为你的工作线程太多的缘故

所以,多线程,并行,异步这些东西不是在哪都适用的,在调用密集时就能用它,因为它会吃你很多内存,如果非要用,请你把线程池的最大数限制一下,这个值可以控制在10以内。

下面是多线程吃内存的例子

          while (true)
            {
               // ThreadPool.SetMaxThreads(10, 10);//限制最大工作线程和i/o线程
                ThreadPool.QueueUserWorkItem(new WaitCallback((a) =>
                {
                    ConcurrentDictionary<string, SendingResult> test2 = new ConcurrentDictionary<string, SendingResult>();
                    test2.TryAdd(Guid.NewGuid().ToString(), new SendingResult
                     {
                         BatchNumber = Guid.NewGuid().ToString(),
                         DbName = "zzl",
                         EndId = 1,
                         StartId = 1,
                         TableName = "zzl",
                         OccurDate = DateTime.Now,
                     });
                }));

                if (DateTime.Now.Minute == 02)
                {
                    break;
                }
            }

查看一个任务管理器

当我把工作线程做了限制后,这种情况得到了改善

如果对于操作频繁(轮训服务)的工作,如果不使用多线程,反而根据不吃什么内存,性能反而更好!

感谢您的阅读!

本文转自博客园张占岭(仓储大叔)的博客,原文链接:基础才是重中之重~多线程的代价~我的内存都被吃了!,如需转载请自行联系原博主。

目录
相关文章
|
6月前
|
Rust 监控 并行计算
用Rust构建电脑网络监控软件:内存安全性和多线程编程
在当今数字化世界中,网络安全一直是至关重要的问题。电脑网络监控软件是确保网络系统安全和高效运行的关键工具。然而,编写电脑网络监控软件需要处理复杂的多线程编程和内存安全性问题。Rust编程语言提供了一种强大的方式来构建安全的电脑网络监控软件,同时避免了许多常见的编程错误。
278 0
|
3月前
|
存储 JSON 运维
【运维】Powershell 服务器系统管理信息总结(进程、线程、磁盘、内存、网络、CPU、持续运行时间、系统账户、日志事件)
【运维】Powershell 服务器系统管理信息总结(进程、线程、磁盘、内存、网络、CPU、持续运行时间、系统账户、日志事件)
49 0
|
3月前
|
存储 缓存 NoSQL
Redis 数据结构+线程模型+持久化+内存淘汰+分布式
Redis 数据结构+线程模型+持久化+内存淘汰+分布式
311 0
|
3月前
|
C++
C++多线程场景中的变量提前释放导致栈内存异常
C++多线程场景中的变量提前释放导致栈内存异常
24 0
|
3月前
|
缓存
Long包装类型的享元模式注意事项
昨天修复订单接口的bug
30 0
|
4月前
|
存储 安全 Java
关于volatile解决内存可见性问题(保证线程安全)
关于volatile解决内存可见性问题(保证线程安全)
|
5月前
|
存储 缓存 Linux
linux下定位多线程内存越界问题实践总结
linux下定位多线程内存越界问题实践总结
|
6月前
|
存储 缓存 安全
JUC第二讲:Java并发理论基础:Java内存模型(JMM)与线程
JUC第二讲:Java并发理论基础:Java内存模型(JMM)与线程
|
7月前
|
缓存 Java 大数据
深入解析JVM调优:解决OutOfMemoryError、内存泄露、线程死锁、锁争用和高CPU消耗问题
深入解析JVM调优:解决OutOfMemoryError、内存泄露、线程死锁、锁争用和高CPU消耗问题
90 0
|
8月前
|
并行计算 算法 数据挖掘
GATK4丨如何设置线程数和内存大小?
GATK4丨如何设置线程数和内存大小?

热门文章

最新文章

相关实验场景

更多