.NET MAUI FAQ - Performance

Find answers for the most frequently asked questions
Expand All Collapse All

Frequent creation and disposal of large objects increases garbage-collection work and can cause brief pauses. To keep navigation feeling smooth, prefer reusing or pooling heavy resources (bitmaps, renderers) and cache resized copies so you do not repeat expensive work.

Permalink

Slow scrolling usually means each row is expensive to measure or render. Make templates lighter, prefer fixed item sizes or set ItemSizingStrategy=”MeasureFirstItem” so items are not measured repeatedly, enable recycling by using CollectionView, and downsample or cache images and heavy controls so the UI can reuse views smoothly.

Permalink

Because the UI thread is being blocked: synchronous I/O, heavy CPU work, .Result/.Wait(), expensive constructors or property getters, large image decoding, or synchronous DI resolution can all run on the UI thread and prevent the first frame from rendering. 

Fixes: make I/O truly async (await network/file calls), offload CPU-bound work to a background thread, start async loads in OnAppearing without blocking the method, and show incremental UI (placeholders) while data loads. Avoid .Result/.Wait() and async void (except event handlers); use ConfigureAwait(false) only inside library code.

Permalink

For profiling .NET MAUI navigation, pick the tool that matches where you test and what you need:

  • Visual Studio Profiler: Best for Windows development; fast, visual CPU/UI-thread hotspots and flamegraphs.  
  • dotnet-trace: Best single cross-platform CLI tool for collecting CPU/nettrace samples from devices or CI.  
  • dotnet-counters: Quick live counters to confirm CPU, GC or thread spikes while you reproduce the issue.  
  • Android Systrace/Android Studio profiler and Xcode Instruments: Use these when the problem looks renderer- or GPU-related on Android or iOS.  
Permalink

Share with

Couldn't find the FAQs you're looking for?

Please submit your question and answer.