Skip to content

🟢 Medium: Optimize GUI icon fields - convert instance to static #118

@jas88

Description

@jas88

Summary

Multiple GUI classes store icon bitmaps in instance fields that are created per-instance, but represent identical images. Converting to static readonly fields would save memory and reduce initialization overhead.

High Priority Classes (5+ bitmaps each)

1. ProgressUI.cs

File: Rdmp.UI/Progress/ProgressUI.cs
Lines: 52-56 (declarations), 87-91 (initialization)

// Current (instance fields):
private Bitmap _information;
private Bitmap _warning;
private Bitmap _warningEx;
private Bitmap _fail;
private Bitmap _failEx;

// In constructor:
_information = ChecksAndProgressIcons.Information.ImageToBitmap();
// ... etc

Impact: High - ProgressUI is frequently instantiated. 5 bitmaps per instance.

2. ChecksUI.cs

File: Rdmp.UI/ChecksUI/ChecksUI.cs
Lines: 40-44 (declarations), 56-60 (initialization)

private Bitmap _tick;
private Bitmap _warning;
private Bitmap _warningEx;
private Bitmap _fail;
private Bitmap _failEx;

Impact: High - 5 bitmaps per instance

Medium Priority Classes (2-3 bitmaps each)

File Lines Bitmaps
DatasetRaceway.cs 68-79 _ignoreRowCounts, _respectRowCounts
SimpleCohortSetUI.cs 30-31, 44-45 _linkImage, _unlinkImage
FavouriteColumnProvider.cs 26-27, 35-36 _starFull, _starHollow
LoadStateUI.cs 23-25, 34-36 _unknown, _noLoadUnderway, _executingOrCrashed
SelectColumnUI.cs 58-59, 129-130 _add, _delete

Good Examples (Already Static)

These classes demonstrate the correct pattern:

RAGSmileyToolStrip.cs:81-83

private static readonly Bitmap Green = CatalogueIcons.TinyGreen.ImageToBitmap();
private static readonly Bitmap Yellow = CatalogueIcons.TinyYellow.ImageToBitmap();
private static readonly Bitmap Red = CatalogueIcons.TinyRed.ImageToBitmap();

Recommended Fix Pattern

// Before (instance field):
private Bitmap _icon;
public MyControl() {
    _icon = SomeIcons.Icon.ImageToBitmap();
}

// After (static readonly):
private static readonly Bitmap IconBitmap = SomeIcons.Icon.ImageToBitmap();

Estimated Impact

Assuming ~10KB per bitmap and 100 instances during application lifetime:

  • Memory savings: 20-50MB
  • Reduced GC pressure: Fewer allocations
  • Faster initialization: No bitmap creation per instance

Labels

enhancement, performance

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions