Tag: memory leaks

Windows窗体内存泄漏

我在Windows应用程序中看到了轻微的内存泄漏。 我在我的应用程序中使用DevExpress XtraForm。 我看到的是表单的一个实例总是保存在内存中。 如果多次打开相同的表单,它仍会保持打开最后一个表单的引用。 防爆。 如果你在应用程序中打开10个不同的表单并关闭所有表单,它仍然不会释放分配给它的内存,因为一些奇怪的“MdiClient对象引用了LayoutEventArgs对象”。 幸运的是,它保留了每种类型单项的参考。 这是Redgate内存分析器输出的链接。 https://dl.dropboxusercontent.com/u/2781659/Memory%20Leak.pdf 在上面的图表中,DepartmentsForm是dipined但由于LayoutEventArgs的affectedComponent成员引用它而无法进行GCed。 如果您发现任何明显错误,请告知。

ConcurrentBag导致内存泄漏吗?

可能重复: ConcurrentBag中可能的内存泄漏? 我的应用程序中有史诗内存泄漏。 从未收集过我在其中一种方法中添加到本地concurrentBag集合中的所有数据。 这个简单的代码演示了我如何使用它: void Main() { var l = new List(){1,2,3,4}; Func(l); l.Clear(); l=null; } void Func(List list) { var bag = new ConcurrentBag(); Parallel.ForEach(list, k=> bag.Add(++k)); list.Clear(); foreach(int i in bag) //I know, I doing it wrong. { list.Add(i); } } 我的期望:将创建包并在方法“Func”处置。 我所看到的:bag永远不会被处置,保存在Parallel.ForEach中创建的所有线程,保存我添加的所有数据。 =( 好的,当我将它添加到列表中时,我可以使用“TryTake”从包中删除项目。 但空袋仍然留在记忆中。 现在我通过使用List而不是ConcurrentBag来解决问题。 但是因为我在记忆中看到这个,所以我睡不着觉。 抱歉我的eng =) UPDATE 我改变了我的方法“Func”: […]

内存泄漏处理Xamarin.Forms

我在我的应用程序中有一个内存泄漏问题,我用Xamarin.Forms创建。 我的应用程序包含带有图像的ListView。 如果我点击一个项目并返回ListPage,我可以在“输出”窗口中看到内存耗尽。 我试过在我的ContentPage的OnDisappearing()中调用GC.Collect() 。 我在Android项目中看到了base.Dispose() 。 但我不知道如何使用它。 ArticleListPage.xaml

如何检查Xamarin.Android中的内存泄漏?

有没有人可以分享使用Xamarin Studio在Xamarin.Android平台上检查内存的建议或方法? 我尝试过Xamarin Studio中提供的以下选项, 工具>仪器>分配 但是,我可以在选项中仅选择iOS设备,如下图所示, 这有什么解决方案吗?

.Net Speech.Synthesizer中的内存泄漏?

我在申请中发现了连续泄漏。 在使用内存分析器进行检查后,我发现该课程是来自Microsoft Speech.Synthesizer的一些对象 所以我建立了一个玩具项目来validation这个假设: //在Speech.Synthesizer对象中显示内存泄漏的玩具示例 static void Main(string[] args) { string text = “hello world. This is a long sentence”; PromptBuilder pb = new PromptBuilder(); pb.StartStyle(new PromptStyle(PromptRate.ExtraFast)); pb.AppendText(text); pb.EndStyle(); SpeechSynthesizer tts = new SpeechSynthesizer(); while (true) { //SpeechSynthesizer tts = new SpeechSynthesizer(); Console.WriteLine(“Speaking…”); tts.Speak(pb); //Print private working set sieze Console.WriteLine(“Memory: {0} KB\n”, (Process.GetCurrentProcess().PrivateMemorySize64 / 1024).ToString(“0”)); […]

ContextMenuStrip导致内存泄漏

我正在创建许多自定义控件并将它们添加到FlowLayoutPanel。 还有一个在设计时创建并填充的ContextMenuStrip。 每次将控件添加到面板时,都会将其ContextMenuStrip属性分配给此菜单,以便所有控件“共享”相同的菜单。 但我注意到当从面板中删除控件并将其丢弃时,任务管理器中使用的内存不会丢失。 每次创建控件并将其添加到布局面板时,它会上升大约50kB。 我下载了.NET Memory Profiler的试用版,它显示在控件处理后有一些菜单条的引用。 我更改了代码,在处理控件之前将ContextMenuStrip属性显式设置为null,是的,内存现在已经释放了。 为什么是这样? GC不应该清理这种类型的东西吗?

ListCollectionView泄漏内存吗?

我一直在研究如何避免因视图模型对INotifyCollectionChanged事件的强引用而导致的内存泄漏。 我正在使用ListCollectionView来查看是否会为我处理它。 我认为以下是泄漏记忆,我做错了什么? var stuff = new ObservableCollection(); while (true) { var result = new ListCollectionView(stuff); // Just to keep make sure that the memory I’m seeing // isn’t waiting to be GC’d GC.Collect(); }

在多个窗口中使用WPF WebBrowser控件时内存泄漏

我正在开发一个使用WPF WebBrowser控件(System.Windows.Controls.WebBrowser)的项目。 该程序的Web浏览器元素是用户可以参与的许多活动之一,并且在单独的窗口中打开。 在用户离开浏览器之后,窗口关闭,每次用户返回浏览器时都会创建一个新窗口。 我们注意到在我们的程序中出现了严重的内存泄漏/性能下降(在初始使用率达到约700mb时,从最初的200起),不断使用浏览器。 在我们自己的代码中未能找到任何资源泄漏点后,我决定确定问题是否与我们自己的WebBrowser包装器控件或WPF控件有关。 我创建了一个新的简单项目,只包含一个MainWindow和一个WebWindow。 主窗口上的一个按钮启动了一个针对gmail的浏览器(我们注意到的网站是我们检查过的少数几个问题)。 关闭此窗口后,不会释放资源(任务管理器或Process Explorer中的VM大小没有减少),并且进程处理的GDI对象数量不会减少(程序以~30开始,打开浏览器需要它到~140,关闭浏览器后~140仍然打开)。 打开另一个浏览器会导致更多句柄,并分配更多资源。 此外,通过在WebBrowser控件上专门调用Dispose()无法解决此问题。 代码很简单,如下: 主窗口: Gmail Button_Click: private void Button_Click(object sender, RoutedEventArgs e) { var win = new WebWindow(); win.Show(); win.Browser.Navigate(“http://www.gmail.com”); } 网页窗口: Close 相关守则: public WebBrowser Browser { get { return _browser; } } private void Button_Click(object sender, RoutedEventArgs e) { Close(); } protected override […]

我多次调用GC.Collect()后图像内存干净

我正在使用图像进行预览。 在我的工作之后,我只是将ImageSource设置为null并调用GC.Collect()但是在调用GC.Collect()之后,50%的内存仍处于保持状态,当我再次调用GC.Collect()时它仍然保持不变。 为什么我的电话要干净? 点击Destroy后 private void ImgDistry_Click(object sender, RoutedEventArgs e) { image.Source = null; GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced); GC.Collect(); GC.WaitForPendingFinalizers(); GC.Collect(); } 在Destroy Image之后设置image.Source = null,并调用GC.Collect(); 记忆仍然暂停。 一段时间后应该自动清洁。 并保持内存,直到我在15-30秒后调用GC.Collect()2-3次。我可以立即清除未使用的位图内存吗? 检查video(内部代码和步骤): – https://www.dropbox.com/s/457hhjnlttbzhlp/TinyTake%20by%20MangoApps-16-08-2018-06-28-51.mp4?dl=0 private void ImgDisplay_Click(object sender, RoutedEventArgs e) { GC.Collect(); GC.WaitForPendingFinalizers(); GC.Collect(); var bitmap = new BitmapImage(); using (var stream = File.OpenRead(filePath)) { bitmap.BeginInit(); bitmap.CacheOption = BitmapCacheOption.OnLoad; […]

OracleBulkCopy内存泄漏(OutOfMemoryexception)

下面是我用于将数据从临时表dataTable批量复制到Oracle数据库中的destTable的代码。 dataTable有大约200万条记录。 using (OracleBulkCopy bulkCopy = new OracleBulkCopy(VMSDATAConnectionString)) { try { foreach (OracleBulkCopyColumnMapping columnMapping in columnMappings) bulkCopy.ColumnMappings.Add(columnMapping); bulkCopy.DestinationTableName = destTableName; //bulkCopy.BatchSize = dataTable.Rows.Count; //bulkCopy.BulkCopyTimeout = 100; int defaultSize = 5000; int.TryParse(ConfigurationManager.AppSettings[“OracleBulkCopyBatchSize”], out defaultSize); bulkCopy.BatchSize = defaultSize; int timeOut = 100; int.TryParse(ConfigurationManager.AppSettings[“OracleBulkCopyTimeout”], out timeOut); bulkCopy.BulkCopyTimeout = timeOut; Console.WriteLine(“Bulk insert from {0} to {1} started at: {2}\r\nBatchSize […]