这是.NET Web浏览器控件的一个广为人知的旧问题。 简介:使用.NET webbrowser控件导航到页面会增加永远不会释放的内存使用量。 重现内存泄漏:将WebBrowser控件添加到窗体。 使用它来导航到任何你想要的网页。 关于:空白作品,在Google图片上滚动直到您的使用率为100MB +,然后在其他地方浏览以注意到几乎没有任何内存被释放是一个更戏剧性的演示。 我目前对应用程序的要求包括长时间运行,显示有限的IE7浏览器窗口。 运行IE7自己的一些混蛋设置的钩子,BHO和组策略也不希望,虽然这看起来像在这个时候的后备。 将浏览器embedded到Windows窗体应用程序中。 使用不同的浏览器基础不是我可用的选项。 IE7是必需的。 以前与这个已知的内存泄漏相关的线程和文章: http://www.vbforums.com/showthread.php?t=644658 如何解决在IE WebBrowser控制内存泄漏? 在多个窗口中使用WPF WebBrowser控件时内存泄漏 http://social.msdn.microsoft.com/Forums/en-US/ieextensiondevelopment/thread/88c21427-e765-46e8-833d-6021ef79e0c8/ http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/8a2efea4-5e75-4e3d-856f-b09a4e215ede http://dotnetforum.net/topic/17400-appdomain-webbrowser-memory-leak/ 通常build议的修补程序不起作用: 去不同的页面并不重要。 约:空白触发泄漏。 它不需要一个页面有JavaScript,或任何其他额外的技术。 使用不同版本的Internet Explorer并不重要。 7,8,9都显示相同的症状,据我所知,所有版本都有相同的内存泄漏的控制。 处置()控制不起作用。 垃圾收集没有帮助。 (事实上,我已经做了这方面的研究表明泄漏是在Webbrowswer控制包裹的非托pipeCOM代码。) 将进程可用内存最小化并设置为-1,-1(SetProcessWorkingSetSize()或simimlar。)只会减less物理内存使用量,不会影响虚拟内存。 调用WebBrowser.Stop()不是一个解决scheme,并打破使用除静态网页以外的任何function,而不仅仅是稍微减less泄漏。 在导航到另一个文档之前强制等待文档加载完全也无济于事。 将控件加载到单独的appDomain中并不能解决问题。 (我自己并没有这样做,但研究显示其他人没有这个路线的成功。) 使用不同的包装如csexwb2没有帮助,因为这也遭受同样的问题。 清除临时Internet文件caching不做任何事情。 问题是在活动内存中,而不是在磁盘上。 整个应用程序closures并重新启动时,内存将被清除。 我愿意直接在COM或Windows API中编写我自己的浏览器控件,如果这是对问题的肯定修复。 当然,我宁愿不要那么复杂的修复; 我宁愿避免低级别做事情,因为我不想在浏览器支持的function方面重新发明轮子。 Letalone在自己的样式浏览器中复制IE7function和非标准行为。 帮帮我?
在非托pipeC / C ++代码中,检测内存泄漏的最佳实践是什么? 和编码准则,以避免? (就好像它很简单;) 过去我们使用了一些愚蠢的方法:每个内存分配调用都有一个计数器增量,在释放时递减。 在程序结束时,计数器值应为零。 我知道这不是一个好方法,有几个捕获。 (例如,如果您释放由平台API调用分配的内存,则您的分配计数将不会与您的释放计数完全匹配。当然,当调用分配内存的API调用时,我们会增加计数器。 我期待着你的经验,build议,也许可以参考一些简化这个工具的工具。
我疯了理解valgrind错误。 我有一个名为matrix的模板类,它有一些重载的操作符等…做一些math运算。 Matrixes在名为ExtendedKalmanFilter的类中使用。 这里是valgrind痕迹: ==3352== Invalid read of size 8 ==3352== at 0x804CC8F: BOViL::math::Matrix<double>::operator*(BOViL::math::Matrix<double> const&) const (Matrix.h:285) ==3352== by 0x8051F91: BOViL::algorithms::ExtendedKalmanFilter::forecastStep(double) (ExtendedKalmanFilter.cpp:48) ==3352== by 0x8051F25: BOViL::algorithms::ExtendedKalmanFilter::stepEKF(BOViL::math::Matrix<double> const&, double) (ExtendedKalmanFilter.cpp:39) ==3352== by 0x804B98F: testSegmentation() (TestSegmentation.cpp:53) ==3352== by 0x805266D: main (main.cpp:16) ==3352== Address 0x6a8b3c0 is 0 bytes after a block of size 48 alloc'd ==3352== at 0x402B454: […]
给定一个以复杂的,循环的方式相互引用的类实例的聚合:垃圾收集器可能无法释放这些对象吗? 我隐约记得过去这是JVM中的一个问题,但是我认为这在多年前就已经解决了。 然而,一些调查显示,我现在正面临一个循环引用,就是造成内存泄露的原因。 注:我一直觉得JVM有能力解决循环引用,从内存中释放这些“垃圾岛”。 不过,我只是提出这个问题,看是否有人发现任何例外。
这里是一个简单的网页,使用jQuery在IE8中泄漏内存(通过观察我的iexplore.exe进程的内存使用情况随着时间在Windows任务pipe理器中的增长而检测到内存泄漏): <html> <head> <title>Test Page</title> <script type="text/javascript" src="jquery.js"></script> </head> <body> <script type="text/javascript"> function resetContent() { $("#content div").remove(); for(var i=0; i<10000; i++) { $("#content").append("<div>Hello World!</div>"); } setTimeout(resetTable, 2000); } $(resetContent); </script> <div id="content"></div> </body> </html> 显然,即使调用jQuery.remove()函数,我仍然遇到一些内存泄漏。 我可以编写我自己的删除function,没有内存泄漏,如下所示: $.fn.removeWithoutLeaking = function() { this.each(function(i,e){ if( e.parentNode ) e.parentNode.removeChild(e); }); }; 这工作得很好,不会泄漏任何内存。 那么为什么jQuery泄漏内存? 我创build了另一个基于jQuery.remove()删除函数,这确实会导致泄漏: $.fn.removeWithLeakage = function() { this.each(function(i,e) […]
在我的课程中,我实现了IDisposable,如下所示: public class User : IDisposable { public int id { get; protected set; } public string name { get; protected set; } public string pass { get; protected set; } public User(int UserID) { id = UserID; } public User(string Username, string Password) { name = Username; pass = Password; } // Other functions […]
我刚刚发现,我的脚本给了我一个致命的错误: Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 440 bytes) in C:\process_txt.php on line 109 这条线是这样的: $lines = count(file($path)) – 1; 所以我认为这是难以加载文件memeory和计数行数,有没有更有效的方式,我可以做到这一点,没有内存问题? 我需要对文本文件进行计数,范围从2MB到500MB。 有时候也许是Gig。 感谢所有的帮助。
我有一个独立的程序,我本地运行,这意味着一个服务器types的程序运行24/7。 最近我发现它有内存泄漏,现在我们唯一的解决scheme是每4小时重新启动一次。 寻找这种内存泄漏的最佳方式是什么? 我们应该使用哪种工具和方法?
我写了C ++ 10年。 我遇到了记忆问题,但可以用合理的努力来修复它们。 在过去的几年里,我一直在写C#。 我发现我仍然有很多内存问题。 他们很难诊断和修复由于非决定因素,因为C#的哲学是,当你非常确定的时候,你不应该担心这样的事情。 我发现的一个特别的问题是我必须明确地处理和清理代码中的所有内容。 如果我不这样做的话,那么内存分析器并没有真正的帮助,因为有太多的糠floating浮动,你不能在他们试图向你展示的所有数据中find泄漏。 我想知道我是否有错误的想法,或者我得到的工具不是最好的。 什么样的策略和工具对于解决.NET中的内存泄漏有用?
我试图在Windows窗体应用程序中运行内存泄漏。 我现在正在看一个包含几个embedded表单的表单。 令我担心的是,孩子在构造函数中形成父表单,并将其保存在私有成员字段中。 所以在我看来垃圾收集时间: 家长通过控件集合(子表单embedded在那里)引用了子表单。 子表格不是GC'd。 子表单通过私有成员字段具有对父表单的引用。 父表格不是GC'd。 这是一个准确的了解如何垃圾收集器将评估的情况? 任何方式来“certificate”它的testing目的?