All posts
Part 09 of 10
BeforeAfter210K123Klines690static events930/s~4polls99K25KUI lines
Part 09 of 10

The Numbers

The complete before and after. No commentary, just data.

For everyone·6 min read
EVEMon v4.0.20Drag to compare →EveLens 1.0.0

Tests

Test Count
23
Test Files
4
Test Lines
417
Architecture Tests
0

Architecture

Static Events
69
Manual Subscriptions
218
Memory Leaks
6
ViewModels
0
Core Interfaces
0
Architectural Laws
0

The UI

UI Lines of Code
99,073
Windows / Dialogs
52
Dark Themes
0
Platforms
1

The Scheduler

UI Thread Invocations/sec
960
Concurrent HTTP Slots
999
Startup Requests (30 chars)
240

Code Quality

Dead Code Lines
18,072
God Object Lines
1,856
God Object References
929
Source Lines (total)
188,250
← This is where EVEMon was in March 2021

For everyone. The complete before/after. No commentary, just data.

Eighty-four days from a crash report to a stable release. Here's what changed.

Every number below was extracted from actual source code by reading both codebases file by file. Nothing is estimated. Everything is verifiable against the public repositories.

01

The Codebase

.NET 8
from .NET 4.6.1
Avalonia
from WinForms
3
platforms (from 1)
7
assemblies (from 2)
DimensionPeter Han EVEMon v4.0.20 (March 2021)EveLens 1.0.0-alpha.28 (March 2026)
.NET VersionFramework 4.6.1 (released 2015)8.0 (released 2023, LTS)
UI FrameworkWindows Forms (released 2002)Avalonia 11.2.3 (released 2024)
Operating SystemsWindowsWindows + Linux + macOS
Source Assemblies2 meaningful7
Total C# Files (source)1,0971,053
Total C# Lines (source)188,250123,861
Test Files4 (+ 1 helper)110
Test Lines41726,605
02

Tests

23
Tests (before)
1,554
Tests (after)
67.6×
Increase
15
Categories covered
Before
23
After
1,554
MetricBeforeAfterChange
Test Count231,55467.6x
Test Files411027.5x
Test Lines41726,60563.8x
Test FrameworkxUnit 2.1 (2015)xUnit 2.9.2 (2024)
Assertion Libraryxunit.assert onlyFluentAssertions 6.12.2
Mock FrameworkMoq (referenced, never used)NSubstitute 5.1.0 (107 mock creations)
Areas Covered3 (async void scan, compression, time formatting)15 categories
Architecture Tests032
CI/CDNonePromotion system + pre-push hooks
03

Architecture

69→0
Static events
218→0
Manual subscriptions
6→0
Memory leaks
0→27
Core interfaces
0→46
ViewModels
0→14
Architectural laws
MetricBeforeAfter
Static Events on God Object690
Event Subscriptions (manual +=)2180 (auto-tracked IDisposable)
Leaked Event Subscriptions60
Dead Events (never subscribed)50
EveMonClient References929 from 150 files122 (being strangled)
ViewModels046 production + 10 display wrappers
Core Interfaces (DI)0 service interfaces27 in zero-dependency Core assembly
Lazy-Initialized Services031
Architectural Laws014 (enforced by 32 tests)
04

The God Object

MetricBeforeAfter
EveMonClient Total Lines1,856~650 (frozen, Law 9)
Static Event Declarations690
OnXxx Firing Methods690
References from Codebase929122 (migration target)
05

The Scheduler

960/s
UI invocations (before)
0
UI invocations (after)
HTTP slots (before)
20
HTTP slots (after)
MetricBeforeAfter
ArchitectureUI-thread timer poll (1-second)Background-thread priority queue
Monitors per Character31 (all polling independently)Centralized fetch jobs
UI Thread Load (30 chars)960 invocations/second0 (scheduler on background thread)
Startup BehaviorThundering herd (240+ simultaneous requests)Phased cold start (4 phases, staggered)
Rate LimitingReactive only (stop at error threshold)Per-character token buckets (150/15min)
Concurrent HTTP SlotsUnbounded (limited by connection pool)SemaphoreSlim(20)
Auth Failure HandlingEach endpoint independently hits expired tokenIsolate + suspend failed character
Tab-Switch AwarenessNone (all characters equal)Active/Background/Dormant priorities
HttpClient CreationNew per request (socket exhaustion)Pooled
Diagnostic VisibilityTrace log file (unstructured text)TCP JSON-lines stream (port 5555)
06

The UI

99,073
UI lines (before)
25,639
UI lines (after)
74%
Reduction
6
Dark themes
MetricBeforeAfter
FrameworkWindows FormsAvalonia 11.2.3
Total UI Files251 .cs + 116 .Designer.cs54 .axaml + 80 .cs
Total UI Lines99,07325,639
Windows/Dialogs5212 dialogs + main window
Character Tabs19 (WinForms UserControls)16 working + 3 coded but not wired
ViewModels046
Dark Mode / Themes06 EVE-faction palettes
Design SystemNone563 lines of style overrides
Skill VisualizationNoneGPU-accelerated SkiaSharp (834 lines)
WinForms Imports in Common660
Largest UI FileMainWindow.cs (2,471 lines)PlanUnifiedView.axaml.cs (2,470 lines)
07

Cross-Platform

MetricBeforeAfter
PlatformsWindowsWindows + Linux + macOS
Target Framework.NET Framework 4.6.1 (Windows-only)net8.0 (portable)
System.Windows.Forms in Common66 imports0
System.Drawing.Image in Models7 files0 (all use object?)
Notification SystemWinForms MessageBoxWinRT toast + notify-send + osascript
Path ResolutionHardcoded %APPDATA%\EVEMonXDG-compliant per-platform
Single Instance DetectionNamed Semaphore (Windows-only)File lock + optional named EventWaitHandle
Platform Service Adapters07
08

Dead Code

Certificate Browser
4,986
3D Pie Chart
4,299
Cloud Storage
2,612
Logitech G15 LCD
1,668
Mineral Worksheet
1,525
In-Game Browser
1,091
Other
1,891
18,072 lines removed
CategoryLines RemovedWhy It Was Dead
In-Game Browser Server1,091CCP removed IGB (2017)
Certificate Browser4,986CCP removed certificates (2014)
3D Pie Chart4,299WinForms GDI+ only
Cloud Storage Sync2,612Deprecated SDKs
Logitech G15 LCD1,668Hardware discontinued (2008)
Mineral Worksheet1,525EVE-Central/BattleClinic dead
Market Pricers783EVEMarketer dead
Hammertime API420API shut down (~2020)
Process Watchdog357Hardcodes "EVEMon"
Osmium/BattleClinic223Sites shut down
Windows 7 Detection108Win7 EOL (2020)
Total18,072
09

Features: Verified Working

32
Features working
6
Themes
16
Character tabs
6
Not yet ported
Skill BrowserSkill QueueSkill PlannerAttributesStandingFactional WarfareMedalKill LogAssetsMarket OrdersContractsWallet JournalWallet TransactionsIndustry JobsPlanetary ColoniesResearch PointsMail MessagesNotificationsEmploymentCalendar EventsImplantsJump ClonesCharacter SheetOverview TabLoyalty PointsSkill CompletionQueue NotificationsMulti-characterCross-platformDark ThemesSettings PersistenceESI OAuth LoadoutsShip BrowserBlueprint BrowserMineral WorksheetImplant CalculatorRoute Planner
FeatureStatus
Character Overview (card grid, portraits, ESI status dots)Working
16 Character Data TabsWorking
Plan Editor (5 browser tabs)Working
6 EVE-Faction Dark ThemesWorking
GPU Skill ConstellationWorking
ESI Scope Editor (per-permission, 3 presets)Working
Per-Category Privacy Mode (6 categories)Working
SSO Authentication (OAuth2 PKCE)Working
Native OS Notifications (Win/Linux/Mac)Working
Per-Character Endpoint ToggleWorking
Activity Log / Notification CenterWorking
Settings (6 sections, sidebar navigation)Working
About Window (57+ contributor Hall of Fame)Working
6 Additional Dialogs (Groups, Plans, Implants, etc.)Working
Total Working32
FeatureStatus
Planetary TabCode exists, not wired to UI
Research Points TabCode exists, not wired to UI
Character ComparisonPlaceholder "Coming soon"
Booster SimulationNot ported (didn't work in WinForms)
Mass Re-authNot ported (never shipped)
Factional Warfare TabCode exists, never populates data
Total Not Working6
10

Settings

MetricBeforeAfter
FormatXML (XmlSerializer)JSON (source of truth)
ESI Token StoragePlain-text XMLJSON (DPAPI disabled for cross-platform)
Save Mechanism1-second timer with 10-second debounceSmartSettingsManager with coalescing
Per-Character StorageSingle settings.xml filePer-component files in character subdirectories
MessageBox.Show() in Settings6 calls0 (uses IDialogService)
Fork MigrationNoneAuto-detect from %APPDATA%\EVEMon
Revision Bug (Issue #4)0 = both missing and zero-1 for missing, 0 for zero
11

The Git History

9,807
Total commits
57+
Contributors
20
Years active
356
EveLens commits
MetricValue
Total Commits (all branches)9,807
Total Named Contributors57+
First CommitAugust 2, 2006
Years Active20
Dormant Gap4.75 years (Mar 2021 - Jan 2026)
Alia Collins Commits356
Days of Active Development57
Release Tags91
Feature Branches47
12

The Rebrand

MetricCount
"EveLens" references in source4,820
"EVEMon" references remaining1,067
— of which: copyright headers~1,050
— of which: About window attribution4
— of which: migration code3
— of which: external URLs3
Accidental "EVEMon" leftovers0

Previous: Part 8 — The Linux Settings Saga

Next: Part 10 — Ship It