garbage-collection相关内容
我们有一个WPF应用程序的基础上,团结MMVVVM格局。在应用程序生命周期可以有几个项目的生命周期,每一个项目的生命周期之后,我们做了人工拆除,并尝试释放的ViewModels的所有参考。对于事件的订阅与统一,我们使用的是弱引用。因此,我们假设推倒之后,我们可以称之为GC收集,使所有的垃圾对象是垃圾收集。我们有手动取消订阅的所有事件的另一种选择,但我们是preferring垃圾收集,因为它会清除2
..
我运行一个多核心的4路服务器上的大量多线程C#应用程序。目前我们使用的是“服务器模式”垃圾回收。然而测试表明,工作站模式GC更快。 MSDN说: 管理$使用该服务器API C $ C应用程序使用的服务器优化的垃圾收集器(GC)而不是默认的工作站GC收到显著的好处。 工作站是默认的GC模式和可用单处理器计算机唯一的一个。工作站GC托管在控制台和Windows窗体应用程序。它执行完整(第2代
..
我来自一个Java背景,我习惯说的是什么JVM的最大堆大小应该的事情之一。如果正在运行的程序试图吞下多是允许的,而垃圾收集器无法释放更多的资源,那么OutOfMemoryError异常被抛出,这一切都一声巨响。因此,设置最大堆大小是很重要的Java语言。 这是否适用于.NET?你能设置堆大小限制?是否CLR只是不停,直到达到机器的物理极限扩大其堆?或者是不是在.net中的一些微妙的原因,一个问题
..
我有一个C#Windows服务,我最近从.NET 3.5到.NET 4.0感动。没有其他的code进行了更改。 在3.5上运行时,对于一个给定的工作负载的内存utilzation是大约1.5 GB的内存和吞吐量是每秒20倍。 (在X无所谓这个问题的情况下。) 在4.0上运行完全相同的服务3GB和5GB +之间所使用的内存,并得到小于每秒4×。事实上,该服务通常会最终拖延了内存使用量继续攀升,直
..
如果对象A侦听到的对象B的事件,对象B将继续反对为生。 有没有一个标准的实施,将prevent这种弱的事件? 我知道WPF有一定的机制,但我期待的东西不依赖于WPF。 我猜的解决方案应该使用弱引用的地方。 解决方案 达斯汀·坎贝尔从DidItWith.NET博客探讨一些失败的尝试创建弱的事件处理程序,然后继续表现出有效的工作,轻量级实现: 解决问题的弱事件处理程序。 在理想情况下,虽然,微软
..
我看了一下世代和大对象堆。但我还是不明白有大对象堆有何意义(或利益)? 什么可能出了问题(在性能和内存方面)如果CLR会不过是仗着第2代(考虑到门槛Gen0和第一代小,以处理大对象)来存储大对象? 解决方案 一个没有垃圾收集刚刚摆脱未被引用的对象,它也的契约的堆。这是一个非常重要的优化。它不只是让内存的使用更有效率的(未使用的孔),它使CPU高速缓存更有效。缓存是现代处理器的真正的大交易,他
..
在.NET中,在此之后code,什么机制被垃圾收集站Thread对象? 新的Thread(美孚)。开始(); 所以GC.Collect(); 是的,它是安全的假设的东西有一个参考线,我只是徘徊究竟是什么。出于某种原因,反射器不显示我的System.Threading,所以我不能把它挖出来自己(我知道MS发布了源$ C $ C对于.NET框架,我只是没有它方便)。 解决方案 运行时
..
考虑以下code: 类TestTimerGC:表 { 公共TestTimerGC() { 按钮btnGC =新按钮(); btnGC.Text =“GC”; btnGC.Click + =(发件人,E)=>所以GC.Collect(); this.Controls.Add(btnGC); Sy
..
在我的班级我实现IDisposable如下: 公共类用户:IDisposable的 { 公众诠释ID {获得;保护套; } 公共字符串名称{;保护套; } 公共字符串传递{获得;保护套; } 公众用户(INT用户名) { ID =用户名; } 公众用户(用户名字符串,字符串密码) { NAME =用
..
在.NET中,在哪些情况下我应该使用 GC.Sup pressFinalize()? 什么优势(S)不使用这种方法给我吗? 解决方案 燮pressFinalize只能由具有终结一类调用。它的通知垃圾收集器(GC)的这对象清理全面。 建议IDisposable模式,当你有一个终结是: 公共类MyClass的:IDisposable的 { 私人布尔处置= FALSE; 受保
..
我认为,GC将调用Dispose最终,如果你的程序没有,但是,你应该在你的程序调用Dispose()只是为了清理确定性。 不过,从我的小测试程序,我没有看到Dispose已获取调用所有.... 公共类测试:IDisposable的 { 静态无效的主要(字串[] args) { 测试S =新的测试(); S = NULL; 所以GC
..
我能否有效地使用这种方法? 使用(CMD的SqlCommand =新的SqlCommand(“GetSomething”,新的SqlConnection(Config.ConnectionString)) { cmd.Connection.Open(); //设置参数和的CommandType为StoredProcedure等等等等。 cmd.ExecuteNonQuer
..
好吧,我读过一对夫妇关于它的话题,但在这里不言而喻。让我们想象一下我有一个应用程序,基本上每一个现在,然后我会点击一个按钮,很多事情会发生几分钟,然后它会赋闲可能一个小时,或者只是1分钟。难道只是整个结束后的良好局面,以调用GC.Collect?我的意思是,我不知道,就在那一刻,我不会被使用我的应用程序,和GC不能猜测它。 解决方案 我可以看到,几个人都走了极端有关不推荐给调用GC.Colle
..
看来, System.Timers.Timer的情况下保持活力的一些机制,但 System.Threading.Timer 实例都没有。 示例程序,用一个周期性的 System.Threading.Timer 和自动复位 System.Timers.Timer的: 类节目 { 静态无效的主要(字串[] args) { VAR定时器1 =新System.Threading.Tim
..
有没有可能在一个管理的系统出现内存泄漏,当你确保所有手柄,实现东西 IDispose 设置? 会不会有,其中某些变量被排除在外的情况下? 解决方案 事件处理程序的非显而易见的内存泄漏很常见的来源。如果从Object2的订阅事件的object1,然后做object2.Dispose()和pretend不存在(和辍学从code的所有引用),还有在object1的活动的隐式引用将prevent O
..
什么是垃圾回收的根源是什么? 我已读根作为和活的定义是“您程序可以访问的任何参考”的定义中的对象正在使用,它可以是一个局部变量,静态变量 我为小有区别的根和活动对象之间的区别感到困惑。 什么是路径为根?如何根和活动对象的工作? 有人能详细点吗? 解决方案 如果你想在内存中的对象为一棵树,在“根”将成为根节点 - 每一个对象立即程序访问 者P =新的Person(); p.car =新
..
我想找出我的对象有多少内存需要,看看有多少人是在大对象堆中(这是什么,超过85,000个字节)。 是不是简单的添加4类型为int,8很长,4(或8,如果你在64位)任何引用类型等每个对象,还是有过顶球的方法,属性等。 解决方案 不要忘了一个实际对象的大小并不包括它引用的对象的大小。 这很可能最终在大对象堆的唯一事情是数组和字符串 - 其他对象往往是相对小的自己。即使一个对象(比如说)10引
..
我想申请一个变化,这样我可以用我的C#3.5的应用程序服务器GC设置 - 我可以做到这一点通过编辑 machine.config的文件 唯一的问题是我不知道那是。 如何才能找到这个文件的可重复的方式在多个不同的机器上的路径 解决方案 32位 %WINDIR%\ Microsoft.NET \框架\ [版本] \ CONFIG \ machine.config中 64位 %
..
一般的建议是,你不应该从你的code调用 GC.Collect的,但什么是例外情况? 我只能想一些非常特殊的情况下,它可能是有意义的强制垃圾回收。 的一个例子是弹簧想到是一种服务,该唤醒间隔,执行某些任务,然后睡了很长时间。在这种情况下,它可能是一个好主意,强制收集到prevent即将要被闲置的过程,从持有上比需要更多的内存。 还有没有其他的情况下是可以接受调用 GC.Collect的?
..
在我的经验看来,大多数人会告诉你,这是不明智的强制垃圾回收,但在某些情况下,你正在处理并不总能收集到0代,但在那里的内存是一个大对象的问题,是它确定强制收取?是否有一个最佳实践在那里这样做? 解决方案 最好的做法是不强制进行垃圾回收。 根据MSDN: “这是可以强制垃圾 收集致电收集,但 大部分时间,这应该是 避免,因为它可能会产生 性能问题。 “ 不过,如果你能可靠地测试您的cod
..