草庐IT

收集箱

全部标签

c# - GC.收集()

好的,我已经阅读了几个关于它的主题,但现在就开始吧。假设我有一个应用程序,基本上我会时不时地点击一个按钮,几分钟内会发生很多事情,然后它可能会再闲置一个小时,或者可能只是1分钟。难道不是在整个结束之后调用GC.Collect的好情况吗?我的意思是,我确实知道在那一刻我不会使用我的应用程序,而且GC无法猜测。 最佳答案 我看到有几个人对不建议调用GC.Collect变得极端。GC.Collect的存在是有原因的,这是我关于何时以及为何调用GC.Collect的建议。一般来说,不用担心调用它,GC会很好地调整自己,并会做正确的事情。有时

c# - 使用 linq 收集到字符串

我有课publicclassPerson{publicstringFirstName{get;set;}publicstringLastName{get;set;}}ListPersonList=newList();PersonList.Add(newPerson(){FirstName="aa",LastName="AA"});PersonList.Add(newPerson(){FirstName="bb",LastName="BB"});我想使用Linq获取一个带有逗号分隔符的字符串,结果如下所示:AA,BB谢谢, 最佳答案

c# - 在 .NET List<T> 中将项目设置为 null 是否使其可用于垃圾收集,这是一个好主意吗?

假设我有一个很大的列表,其中每个项目都被处理一次,然后在长时间的操作中不再查看:Listitems;//...somestuffisdonewiththelistthenfinallyfor(inti=0;i如果我取消注释items[i]=null,这是否会取消索引i处的对象并使其可用于垃圾收集?从内存使用的角度来看,这样做与让GC在整个列表未被使用时稍后发生相比会更有效吗?这忽略了一些问题,例如稍后更改代码,结果发现这些项目后来被使用,并且出现意外的null破坏。 最佳答案 如果对该对象的唯一根访问引用是通过该列表,那么是的,将该

c# - .NET 中的垃圾收集(代)

关闭。这个问题需要更多focused.它目前不接受答案。想改进这个问题吗?更新问题,使其只关注一个问题editingthispost.关闭3年前。Improvethisquestion我已经阅读了很多描述Gen1、Gen2垃圾收集和对象存活几代的.NET性能文章。为什么对象在集合中幸存下来?什么是固定?

c# - 异步/等待、自定义等待程序和垃圾收集器

我正在处理这样一种情况,即托管对象在async方法的中间过早完成。这是一个业余爱好家庭自动化项目(Windows8.1、.NET4.5.1),我在其中为非托管的第3方DLL提供C#回调。回调在特定传感器事件时被调用。为了处理该事件,我使用了async/await和一个简单的自定义等待程序(而不是TaskCompletionSource)。我这样做的部分原因是为了减少不必要的分配数量,但主要是出于好奇,作为一种学习练习。下面是我所拥有的一个非常精简的版本,使用Win32计时器队列计时器来模拟非托管事件源。让我们从输出开始:PressEntertoexit...Awaiter()tick:

c# - .NET 垃圾收集器之谜

在我的工作中,我们遇到了OutOfMemoryExceptions问题。我写了一段简单的代码来模仿一些行为,最后我得到了以下谜团。看看这段简单的代码,它在内存不足时崩溃。classProgram{privatestaticvoidMain(){Listlist=newList(200000);intiter=0;try{for(;;iter++){list.Add(newbyte[10000]);}}catch(OutOfMemoryException){Console.WriteLine("Iterations:"+iter);}}}在我的机器上它结束了迭代次数:148008然后我在

c# - .NET 垃圾收集器是否执行代码的预测分析?

好吧,我意识到这个问题可能看起来很奇怪,但我只是注意到一些让我感到困惑的事情......看看这段代码:staticvoidTestGC(){objecto1=newObject();objecto2=newObject();WeakReferencew1=newWeakReference(o1);WeakReferencew2=newWeakReference(o2);GC.Collect();Console.WriteLine("o1isalive:{0}",w1.IsAlive);Console.WriteLine("o2isalive:{0}",w2.IsAlive);}由于o1

c# - .Net 4 MemoryCache 泄漏并发垃圾收集

我正在使用新的MemoryCache在.Net4中,最大缓存大小限制以MB为单位(我测试过它设置在10到200MB之间,在内存为1.75到8GB的​​系统上)。我没有在对象上设置任何基于时间的过期时间,因为我只是将缓存用作高性能驱动器,只要有空间,我就希望使用它。令我惊讶的是,缓存拒绝逐出任何对象,以至于我会得到SystemOutOfMemory异常。我启动了perfmon,将我的应用程序连接到.NetCLRMemory\#BytesInAllHeaps,.NetMemoryCache4.0,和Process\PrivateBytes——事实上,内存消耗失控了,并且没有注册缓存修剪。做

c# - 垃圾收集器和循环引用

考虑这两个类:publicclassA{Bb;publicA(Bb){this.b=b;}}publicclassB{Aa;publicB(){this.a=newA(this);}}如果我有像上面那样设计的类,这些类的对象会被垃圾收集器(GC)收集吗?假设我这样做:voidf(){Bb=newB();}在这个方法中,我创建了一个名为b的B实例,当方法返回时,b超出范围,并且GC应该能够回收它,但是如果要回收它,它必须先回收a,它是B的成员,然后再回收a,需要先收集b,它是A的成员。它变成了圆形。所以我的问题是:这种循环引用是否会阻止GC收集对象?如果是,那么我们怎样才能避免这个问题呢

c# - 为什么在 C# 中没有引用计数 + 垃圾收集?

我有C++背景,使用C#已有大约一年的时间。像许多其他人一样,我对为什么确定性资源管理没有内置到语言中感到困惑。我们有处置模式,而不是确定性的析构函数。Peoplestarttowonder通过他们的代码传播IDisposable癌症是否值得付出努力。在我偏爱C++的大脑中,使用带有确定性析构函数的引用计数智能指针似乎是垃圾收集器的重要一步,垃圾收集器要求您实现IDisposable并调用dispose来清理非内存资源。不可否认,我不是很聪明……所以我问这个纯粹是为了更好地理解为什么事情是这样的。如果C#被修改为:对象是引用计数的。当对象的引用计数变为零时,将对该对象确定性地调用资源清