Agents & OrchestrationSûr100100/100
Maui Performance (.NET)
Fix measurable MAUI performance issues. USE FOR: `maui profile startup`, Release/physical-device measurements, janky `CollectionView`, compiled bindings, oversized images, `MauiImage` `BaseSize`, thumbnail decoding, trim/NativeAOT regressions, IL2026, source-generated serializers, linker validation. DO NOT USE FOR: generic UI bugs, workload discovery, architecture-only work.
ou envoie-le directement à ton agent.
Installer dans ton projet
$ curl -fsSL https://arboristhree.xyz/cli/install-skill.mjs -o /tmp/arboris-install-skill.mjs && node /tmp/arboris-install-skill.mjs maui-performance__dotnet-maui-labs__plugins-dotnet-maui-skills-5add2c54ed3f.NET
dotnet/maui-labs
Contenu à copier
---
name: maui-performance
description: >-
Fix measurable MAUI performance issues. USE FOR: `maui profile startup`, Release/physical-device measurements, janky `CollectionView`, compiled bindings, oversized images, `MauiImage` `BaseSize`, thumbnail decoding, trim/NativeAOT regressions, IL2026, source-generated serializers, linker validation. DO NOT USE FOR: generic UI bugs, workload discovery, architecture-only work.
metadata:
origin: .NET
---
# MAUI Performance
Use this skill when the user reports a measurable performance symptom or asks
for a performance review. Measure first, then change the smallest thing that can
explain the symptom.
## Workflow
1. Identify the symptom: startup, first page render, scrolling, navigation,
memory, image loading, or network-bound delays.
2. Inspect target frameworks and configuration. Prefer Release builds for
meaningful startup and runtime measurements.
3. For startup, use the MAUI CLI profiling surface:
```bash
maui profile startup --help
```
Then run the target app with the appropriate platform/device options.
4. For UI runtime issues, inspect visual tree depth and logs when DevFlow is
available.
5. Apply targeted fixes and re-measure.
## High-Value Fix Areas
| Symptom | Check |
| --- | --- |
| Slow startup | Startup profile, excessive work in `MauiProgram`, synchronous I/O, eager service construction, font/image count |
| Slow bindings | Missing `x:DataType`, reflection-heavy bindings, converters doing expensive work |
| Janky lists | `CollectionView` inside `ScrollView`, complex templates, missing item sizing strategy, image decode size |
| Layout cost | Deep nested layouts, unnecessary `Grid` nesting, repeated measure invalidations |
| Image memory | Oversized source images, missing MAUI image resizing, unbounded remote image caching |
| Release regression | Debug-only diagnostics leaking into Release, linker/trimming differences |
## Image Memory Guidance
A 4000×4000 RGBA PNG decodes to ~64 MB in memory regardless of how small it
appears on screen. A 200×200 display-sized image decodes to ~160 KB — 400×
less memory. Apply these changes when large images cause scrolling or memory
issues:
1. Resize images to display size before adding to the project.
2. Use the `MauiImage` build action in `.csproj` with `BaseSize` for automatic
platform-specific resizing:
```xml
<MauiImage Include="Resources/Images/*.png" BaseSize="400,400" />
```
3. Decode images to display size at runtime when loading from remote URLs.
`BaseSize` only applies to packaged build-time image resources; it does not
resize downloaded, camera, gallery, or user-imported images.
4. Use WebP or SVG for icons and logos that need to scale.
5. For list rows, generate or download thumbnails — never decode 4000 × 4000
images inside a `CollectionView` item template.
- Do not wrap `CollectionView` in `ScrollView`.
- Keep item templates shallow and use compiled bindings.
- Prefer fixed or predictable item sizing when possible.
- Load thumbnails sized for display, not full-resolution images.
- Avoid expensive work in property getters used by item templates.
## Startup Guardrails
- Avoid network calls and file scans during app construction.
- Register services lazily when possible; do not instantiate heavy services just
to register them.
- Defer non-critical initialization until after the first page is visible.
- Keep debug-only logging and DevFlow setup behind `#if DEBUG`.
## Trimming and NativeAOT Guardrails
- Treat trim and NativeAOT issues as publish-build issues, not Debug-build
issues. Reproduce with the same publish properties used by the app.
- Do not silence trim warnings blindly. Warnings such as IL2026 indicate code
that may not be safe when members are removed.
- Prefer source-generated serializers and explicit registrations over reflection
discovery for app models and services used in trimmed builds.
- When reflection is required, keep the dependency explicit with attributes such
as `DynamicDependency` or a linker descriptor, and document why it is needed.
- Test startup and the affected feature after publish; a successful Debug run is
not evidence that trimming or NativeAOT is safe.
For System.Text.Json in trimmed or NativeAOT builds, move startup JSON paths to
a source-generated context:
```csharp
[JsonSerializable(typeof(List<Product>))]
internal partial class AppJsonContext : JsonSerializerContext
{
}
var products = JsonSerializer.Deserialize(
json,
AppJsonContext.Default.ListProduct);
```
Keep the context near app models or serialization infrastructure and add every
serialized DTO shape used by the startup path. Do not hide IL2026 with broad
warning suppressions when a source-generated serializer can make the dependency
explicit.
## Validation Checklist
- There is a before/after measurement or a clear reason measurement is blocked.
- Startup investigations use `maui profile startup` when applicable.
- Binding-heavy pages use `x:DataType`.
- Lists avoid nested scrolling and oversized images.
- Trim/NativeAOT changes are validated with a publish build when applicable.
- Performance fixes do not remove accessibility metadata or automation hooks.Colle ce Markdown dans ton agent ou utilise les boutons ci-dessus pour l’écrire dans ton projet.
Ce que fait Maui Performance (.NET)
Do not wrap `CollectionView` in `ScrollView`.
Keep item templates shallow and use compiled bindings.
Prefer fixed or predictable item sizing when possible.
Load thumbnails sized for display, not full-resolution images.
Comment utiliser Maui Performance (.NET)
1
Copie le prompt
Un clic copie le prompt packagé (ou l'envoie à ton agent).
2
L'agent installe le skill
Il ajoute le SKILL.md et ses ressources à ton projet.
3
Activation automatique
Le skill s'active dès que le contexte correspond.
Déclencheurs pour Maui Performance (.NET)
Dis simplement à ton agent quelque chose comme :
Applique le skill maui-performance__dotnet-maui-labs__plugins-dotnet-maui-skills-5add2c54ed3f à cette tâche
Utilise maui-performance__dotnet-maui-labs__plugins-dotnet-maui-skills-5add2c54ed3f pour améliorer cette implémentation
Passe en revue ce sujet avec maui-performance__dotnet-maui-labs__plugins-dotnet-maui-skills-5add2c54ed3f
Skills liés à Maui Performance (.NET)
Acceleration (Microsoft)
Compare synthetic acceleration options and clearly separate scenario value from forecast commitments.Account Overview (Microsoft)
Create a synthetic Acme account overview and identify evidence that merits seller attention.Acroform Writer (Microsoft)
Use this skill whenever the user wants values written INTO an existing PDF form that lives in the connected SharePoint knowledge source — filling out, completing, populating, or submitting a fillable PDF (application, intake sheet, contract, government form) from data they supply, a spreadsheet row, or the conversation. Triggers include "fill out the job application form", "complete the intake form for [person]", "populate our standard NDA template", and "make this ready to send / non-editable" (flatten). The source form should be found via knowledge search; only ask the user to upload it if knowledge search turns up nothing plausible. different task), and do NOT use it on scanned/image-only PDFs that have no real fillable fields — those need OCR or manual overlay instead, which this skill explicitly detects and reports rather than silently failing.