xamarin / Xamarin.Forms

Xamarin.Forms is no longer supported. Migrate your apps to .NET MAUI.
https://aka.ms/xamarin-upgrade
Other
5.62k stars 1.87k forks source link

[Bug] Memory leak in ListView.ScrollTo function when using CachingStrategy=RecycleElement #14190

Open remi-appsolu opened 3 years ago

remi-appsolu commented 3 years ago

Memory leak in ListView.ScrollTo function when using CachingStrategy=RecycleElement

Steps to Reproduce

  1. Run the attached project,
  2. Click several times on the refresh and Scroll button
  3. You will see that GC.GetTotalMemory will show constant growing memory usage

Expected Behavior

Memory usage should stay stable

Actual Behavior

Memory usage grows indefinitly

Basic Information

Environment

Show/Hide Visual Studio info ``` Microsoft Visual Studio Professional 2019 Version 16.9.4 VisualStudio.16.Release/16.9.4+31205.134 Microsoft .NET Framework Version 4.8.03752 Version installée : Professional Common Azure Tools 1.10 Provides common services for use by Azure Mobile Services and Microsoft Azure Tools. Extensibility Message Bus 1.2.6 (master@34d6af2) Provides common messaging-based MEF services for loosely coupled Visual Studio extension components communication and integration. Extension IntelliCode 1.0 Informations détaillées sur l'extension Visual Studio IntelliCode Gestionnaire de package NuGet 5.9.0 Gestionnaire de package NuGet dans Visual Studio. Pour plus d'informations sur NuGet, visitez https://docs.nuget.org/ Microsoft JVM Debugger 1.0 Provides support for connecting the Visual Studio debugger to JDWP compatible Java Virtual Machines Microsoft MI-Based Debugger 1.0 Provides support for connecting Visual Studio to MI compatible debuggers Mono Debugging for Visual Studio 16.9.7 (df23ba6) Support for debugging Mono processes with Visual Studio. Outils Azure App Service v3.0.0 16.9.693.2781 Outils Azure App Service v3.0.0 Outils C# 3.9.0-6.21160.10+59eedc33d35754759994155ea2f4e1012a9951e3 Composants C# utilisés dans l'IDE. Selon votre type de projet et vos paramètres, une version différente du compilateur peut être utilisée. Outils Visual Basic 3.9.0-6.21160.10+59eedc33d35754759994155ea2f4e1012a9951e3 Composants Visual Basic utilisés dans l'IDE. Selon votre type de projet et vos paramètres, une version différente du compilateur peut être utilisée. Package hôte de l'adaptateur de débogage de Visual Studio Code 1.0 Couche d'interopérabilité pour l'hébergement d'adaptateurs de débogage Visual Studio Code dans Visual Studio ProjectServicesPackage Extension 1.0 ProjectServicesPackage Visual Studio Extension Detailed Info Visual F# Tools 16.9.0-beta.21102.9+7ce7132f1459095e635194d09d6f73265352029a Microsoft Visual F# Tools VisualStudio.DeviceLog 1.0 Informations sur mon paquet VisualStudio.Foo 1.0 Information about my package VisualStudio.Mac 1.0 Mac Extension for Visual Studio Xamarin 16.9.000.273 (d16-9@1bba9e0) Extension Visual Studio permettant de développer pour Xamarin.iOS et Xamarin.Android. Xamarin Designer 16.9.0.318 (remotes/origin/7b35adcdd1b204bbdcb279e0f029d151a20a4bf3@7b35adcdd) Extension Visual Studio pour activer les outils Xamarin Designer dans Visual Studio. Xamarin Templates 16.9.72 (426ebf6) Templates for building iOS, Android, and Windows apps with Xamarin and Xamarin.Forms. Xamarin.Android SDK 11.2.2.1 (d16-9/877f572) Xamarin.Android Reference Assemblies and MSBuild support. Mono: 5e9cb6d Java.Interop: xamarin/java.interop/d16-9@54f8c24 ProGuard: Guardsquare/proguard/v7.0.1@912d149 SQLite: xamarin/sqlite/3.34.1@daff8f4 Xamarin.Android Tools: xamarin/xamarin-android-tools/d16-9@d210f11 Xamarin.iOS and Xamarin.Mac SDK 14.14.2.5 (3836759d4) Xamarin.iOS and Xamarin.Mac Reference Assemblies and MSBuild support. ```

Build Logs

Screenshots

Initial memory usage Screenshot_1618953292

Memory usage after 10 calls to ScrollTo

Screenshot_1618953296

You can see that around 14 MB where leaked

Reproduction Link

I have cloned the CustomCells sample from xamarin-forms-samples and slightly modified it to showcase the memory leak. You can get it from github : https://github.com/remi-appsolu/FormsListViewSample

Workaround

Not using RecycleElement fixes the issue but it is not recommended for performance.

remi-appsolu commented 3 years ago

May be linked with #10820 #11344 and #12648