水木社区手机版
首页
|版面-Microsoft.NET技术(DotNET)|
新版wap站已上线
返回
首页
|
上页
|
下页
|
尾页
|
2/3
|
转到
主题:请教板上大佬,常见的memory leak通常发生在什么情况呢
10楼
|
oldwatch
|
2021-04-16 14:48:00
|
只看此ID
这显然是(不当操作)内存溢出而不是泄露
【 在 hongdiao (hongdiao) 的大作中提到: 】
: 一直往容器里面加元素,忘记在合适的时机删元素。
--
FROM 114.86.46.*
11楼
|
letdown
|
2021-04-16 17:00:32
|
只看此ID
非托管内存泄漏
1.io
2.端口瞬间开太多
event handler泄漏
1.lamda表达式泄漏,有一些特殊的lamda表达式会导致没有释放
2.event handler
gc有问题泄漏
1.大内存消耗,gc处理不过来
2.gc线程被阻塞,比如重载了finalize方法里写代码while(true);
其他的暂时想不起来了
【 在 ustcBoy 的大作中提到: 】
: 能简要说一些常见的吗,谢谢了
--
FROM 183.15.177.*
12楼
|
oldwatch
|
2021-04-16 17:59:08
|
只看此ID
event handler导致内存泄露是啥情形?
【 在 letdown (不知道我是谁) 的大作中提到: 】
: 非托管内存泄漏
: 1.io
: 2.端口瞬间开太多
: ...................
--
FROM 223.104.213.*
13楼
|
ustcBoy
|
2021-04-16 18:04:07
|
只看此ID
长见识了。
lambda导致的泄露可以举个例子吗 ?平时还是比较经常用到lambda表达式的
【 在 letdown () 的大作中提到: 】
: 非托管内存泄漏
: 1.io
: 2.端口瞬间开太多
:
--
FROM 112.12.138.*
14楼
|
ustcBoy
|
2021-04-16 18:06:56
|
只看此ID
我在上面gist写的那个例子就是event的leak . listener class在自身引用变量超出生命周期后仍然无法被GC,被事件发起者的事件指针一直引用着。
【 在 oldwatch () 的大作中提到: 】
: event handler导致内存泄露是啥情形?
:
: 【 在 letdown (不知道我是谁) 的大作中提到: 】
--
FROM 112.12.138.*
15楼
|
letdown
|
2021-04-16 19:58:54
|
只看此ID
我很久很久没有写过c#了,只是记得有这么一档子事情,具体你可以参照一下这篇文章
https://stackoverflow.com/questions/46962507/why-does-a-lambda-expression-in-c-sharp-cause-a-memory-leak
哦,对,还有一种情况好像是发生在console程序中,如果没记错的话,console.writeLine这样的方法如果调用太频繁会阻塞线程,也会阻塞gc,忘记是不是这样了
【 在 ustcBoy 的大作中提到: 】
: 长见识了。
: lambda导致的泄露可以举个例子吗 ?平时还是比较经常用到lambda表达式的
--
FROM 183.14.31.*
16楼
|
Millor
|
2021-04-16 21:00:38
|
只看此ID
泄露 这个词确实让人费解
一开始是从c++里转移过来的概念。c++里主要是指一段内存被分配了空间,但指向它的指针找不到了。于是这段空间再也不会被回收到操作系统当中。
准确点说 在 c# 里,是很多内存被占用释放不了,又没有被使用的情景。
能过面试就行了,就这样吧。
【 在 ustcBoy (ustcBoy) 的大作中提到: 】
: --
: 发自xsmth (iOS版)
: --
:
--
FROM 120.244.236.*
17楼
|
leadu
|
2021-04-16 21:54:00
|
只看此ID
eventhandler这些不算泄露,c#也没有循环引用问题
但跨环境(非托管,xamarin)容易出一些问题。
内存泄露不是问题,内存泄露导致的稳定性问题才是问题。程序跑一年泄露1kB的这种一般都不修
【 在 letdown 的大作中提到: 】
: 我很久很久没有写过c#了,只是记得有这么一档子事情,具体你可以参照一下这篇文章
:
https://stackoverflow.com/questions/46962507/why-does-a-lambda-expression-in-c-sharp-cause-a-memory-leak
: 哦,对,还有一种情况好像是发生在console程序中,如果没记错的话,console.writeLine这样的方法如果调用太频繁会阻塞线程,也会阻塞gc,忘记是不是这样了
: ...................
--
FROM 123.115.140.*
18楼
|
ustcBoy
|
2021-04-17 10:01:31
|
只看此ID
是不是要看具体应用场景呢? 如果是桌面应用中,主窗口一直存活的情况下,错误的保持了对一些服务或者VM的事件引用导致它们无法被GC回收的话,应该会有影响吧?
我没有具体碰到这样的问题,只是纯脑补。请有经验的大佬分享一下体会。
【 在 leadu () 的大作中提到: 】
: eventhandler这些不算泄露,c#也没有循环引用问题
: 但跨环境(非托管,xamarin)容易出一些问题。
:
: 内存泄露不是问题,内存泄露导致的稳定性问题才是问题。程序跑一年泄露1kB的这种一般都不修
--
FROM 60.180.33.*
19楼
|
ustcBoy
|
2021-04-17 10:47:41
|
只看此ID
学习了一下SO说的这个例子,感觉它是指这个lamba 局部变量将会是一个静态的存在,所以无法被GC了,但是Test这个类应该还是在GC的管辖内的。所以即使多次创建的Test也只会有一个lambda成员作为静态存在,而多次创建的Test对象最终都会被回收。这应该不用被视作leak吧?
不知道我理解的对不对。
【 在 leadu () 的大作中提到: 】
: eventhandler这些不算泄露,c#也没有循环引用问题
: 但跨环境(非托管,xamarin)容易出一些问题。
:
: 内存泄露不是问题,内存泄露导致的稳定性问题才是问题。程序跑一年泄露1kB的这种一般都不修
--
FROM 60.180.33.*
首页
|
上页
|
下页
|
尾页
|
2/3
|
转到
选择讨论区
首页
|
分区
|
热推
BYR-Team
©
2010.
KBS Dev-Team
©
2011
登录完整版