garbage-collection相关内容
我想知道是什么发生了一个对象(在C#),一旦其参考变为重新分配。例如: 轿车C =新车(“红车”); C =新车(“蓝车”); 由于参考重复使用,并垃圾收集处置/处理“红车”这是丢失后,它的参考?还是一个单独的方法需要落实处置“红车”的? 我主要想知道,因为有我要去参加一个比较大的对象回收,并且需要知道,如果有什么事情,当它被重建了应该做的。 解决方案
..
我在实现IEnumerable接口的对象池下面的代码 公开的IEnumerable< T> ActiveNodes { 得到 { 的for(int i = 0; I< _pool.Count;我++) { 如果(_pool [我] .AvailableInPool) { 收益率的回报_pool [I] } } } } 由于据我(据这个问题
..
在C#中,当有任何未被引用的对象受垃圾收集。假如是这样的话,将以下任一曾经收集或垃圾收集足够聪明,放弃他们两个? 类节目 { 静态无效的主要() { A A =新的A(); A·B =新的B(); a.b.a =一; A = NULL; } { 等级A { 公众B B; } 类B { 公开发行A一; } 解决方案 它们都将成为
..
我也读到了垃圾收集一些信息(它是如何的作品等)。我试图理解它是如何工作的做我的例子,但我觉得我有问题。我知道垃圾收集器运行时:B您调用GC.Collect()结果 内存不够,结果$ B $。结果 这是我的代码: 公共部分Form1类:表格 { 酒店的公共测试_D; 公布尔_first = FALSE; 公共Form1中() { 的InitializeComponent();
..
我发现了整箱的代码不同寻常的样品 这是在System.IO.BinaryReader方式: 受保护的虚拟无效的Dispose(BOOL处置){ 如果(处置){ 流copyOfStream = m_stream; m_stream = NULL; 如果(copyOfStream = NULL&放大器;!&安培;!m_leaveOpen) copyOfStream.Close();
..
我有两个类,A和B.申请A类具有B类的引用中的类的析构函数做资源的一些清理工作,但他们以正确的顺序被调用,先析构函数A和B.随后的析构函数 正在发生的事情是,不知怎的,b的析构函数被调用,然后再A的析构函数崩溃,因为试图执行来自处置对象的方法。 时GC的这种行为是否正确?我预计GC检测A有到B的引用,然后首先调用析构函数。 ?我说的对 感谢队友 PD:大约在析构函数/终结/
..
我试图追查在一个变量似乎分配给一个有效的对象的单声道运行时的错误,然后再重新分配给一个假的对象,特别是 //代码我分配,罚款 变种O =新的对象早期(); //有效的分配 //后面的代码,这就是所谓的,不精 锁(O)//< - 被触发错误由于“O”现在引用一句废话内存位置。 我想知道,当提及“O”变得毫无意义,这样做很期待换一种方式来确定“O”在C#代码中的不同
..
我养大缓存与价值的IEnumerable℃的字典; KeyValuePair<日期时间,双>> 。我从字典中删除项目定期和项目添加到字典中周期性。现在每一次我得到一个System.OutOfMemoryException。我想知道为什么没有垃圾收集器来拯救我? 解决方案 请记住,一个堆可以得到支离破碎的@Gabe提及。即使你可能有空闲的内存它可能没有大到足以分配字典,当它
..
我有与使者系统MVVM光一个非常奇怪的问题。这很难解释,所以这里是小程序,演示了这个问题: 使用系统; 使用GalaSoft.MvvmLight.Messaging; 命名TestApp { 类节目 { 静态无效的主要(字串[] args) { 变种PROG =新计划(); 变种收件人=新的对象(); prog.RegisterMessageA(收件人); pr
..
当捕获转储文件,并(在WinDbg中如)分析它,我经常得到警告,该数据可能不准确,或命令可能无法访问,因为这个过程是在GC的中间时,转储文件收集。 在做内存分析,我们经常这样做,因为对进程的内存高,内存压力高,我猜部队.NET频繁GC。 我如何避免GC期间服用转储?有没有办法知道什么时候其安全地捕获转储文件? 解决方案 我在这方面的专家,但我已经注意到,您可以使用.NET运行时
..
我正在那里似乎是内存泄漏.NET应用程序。我知道教科书的答案,那应该事件退订,弃对象应释放等等... 我有一个测试工具,能够重现错误。在某一类的终结我写安慰 公共类Foo { //构造函数 公共美孚() { } 〜公共美孚() { Console.WriteLine(“富已完成”); } } 在测试工具,我创建一个单一实例美孚(这反过来又创造并与
..
我能相信一个对象被销毁,其析构函数被立即调用,当它超出范围在C#? 我想,这应该因为许多常见的编码实践(如交易对象),依赖于这种行为,但我不是很习惯用垃圾收集工作,并没有什么见识到这种语言通常的行为。 感谢。 解决方案 不,.Net和hense C#依赖于一个垃圾回收的内存管理。所以析构函数(在.NET是所谓的终结)不会调用,直到GC发现它适当摧毁对象 此外:在C#中唐之
..
我有一个C ++的非托管类 NativeDog 这需要从C#中使用,所以我创建一个包装类 ManagedDog 。 //非托管C ++类 类NativeDog { NativeDog( ...); //构造 〜NativeDog(); //析构函数 : } // C ++ / CLI的包装类 引用类ManagedDog { NativeDog * innerObject
..
我有一个析构函数方法 公共部分Form1类的空白Winform的:表 { 酒店的公共Form1中() { System.Diagnostics.Trace.WriteLine(“Form1.Initialize”+ this.GetHashCode()的ToString()); 的InitializeComponent(); } 〜Form1中() { System.Diag
..
从MSDN报价: 如果敲定或敲定的覆盖抛出一个异常,运行时会忽略异常,终止该Finalize方法,并继续最终处理。 然而,如果我有: 〜人() { 抛出新的异常(“咩”); } 然后它会导致运行时异常? PS我知道,这是不可能发生的,但我只是解决此问题好奇。我们的一个客户有身边全是其终结的空尝试捕捉..它甚至没有登录时,事情发生了错误或reser
..
我有以下代码: 新主题(新的ThreadStart(委托() {$ B $ ; b,而(真) { //什么 } }))启动(); 垃圾收集器完成的这个实例发而这是在运行状态? 解决方案 在CLR跟踪所有正在运行的线程。只要有对他们不会被垃圾收集对象的引用。而且,由于CLR保持一个参考的所有正在运行的线程的GC不会去碰它们。
..
我在想,如果一个对象设置为null将清理附着在物体事件的任何事件处理器... 例如 按钮按钮=新按钮(); button.Click + =新的EventHandler(Button_Click); 键= NULL; 键=新按钮(); button.Click + =新的EventHandler(Button_Click); 键= NULL; 等等.
..
在他的文章有关防止多个实例申请后,迈克尔·温顿提出以下代码: { 布尔OK / p> 静态无效的主要()// ARG游戏确定在这里; M =新System.Threading.Mutex(真的,“YourNameHere”,走出OK); 如果 { MessageBox.Show(“另一个实例已在运行。”)(好!); 的回报; } Application.Run(新
..
在回答记者有关SO另一个问题,以及随后的评论的讨论中,我遇到了对我不是明确点墙壁上。 在纠正我,在那里我误入歧途... 的任何一点 在垃圾收集器收集的对象,它会调用该对象的终结,在一个单独的线程(除非终结一直被压制,例如通过的Dispose()方法)。虽然收集,GC的暂停只是触发采集(采集背景除外)的线程的所有线程 什么是不明确的: 是否垃圾收集器收集么? 如果不是之前
..
我目前正在调试我们利用我们的系统中显示它们之前标记具有一定的文字图像的方法。 标签的方法看起来像这样的时刻 私有静态图像TagAsProductImage(形象画像) { 试 { //准备要添加的内存压力垃圾收集(500000字节大约是485千字节)。 //应该解决一些OutOfMemoryExceptions。 GC.AddMemoryPressure(500000);
..