Initial commit
This commit is contained in:
commit
1ad237cfc9
106 files changed
+4781
No files matched your search
@@ -0,0 +1,254 @@
|
||||
# AIDA64 Clone Development Plan
|
||||
|
||||
## Project Overview
|
||||
|
||||
A small, lightweight AIDA64 clone built with **.NET 10** and **WPF**, drawing design inspiration from **CPU-Z**. The goal is
|
||||
to provide essential system information and benchmarking capabilities in a compact, performant desktop application.
|
||||
|
||||
---
|
||||
|
||||
## 1. Architectural Outline
|
||||
|
||||
### 1.1 High-Level Architecture
|
||||
|
||||
The application follows a **Model-View-ViewModel (MVVM)** pattern with a modular, plugin-like structure for each hardware
|
||||
subsystem.
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────┐
|
||||
│ WPF UI (Views) │
|
||||
├─────────────────────────────────────────────────┤
|
||||
│ ViewModels (Presentation) │
|
||||
├─────────────────────────────────────────────────┤
|
||||
│ Domain Models & DTOs │
|
||||
├─────────────────────────────────────────────────┤
|
||||
│ Hardware Abstraction Layer (HAL) │
|
||||
│ ┌──────────┬──────────┬──────────┬──────────┐ │
|
||||
│ │ CPU │ RAM │ GPU │ Disk │ │
|
||||
│ │ Prober │ Prober │ Prober │ Prober │ │
|
||||
│ └──────────┴──────────┴──────────┴──────────┘ │
|
||||
├─────────────────────────────────────────────────┤
|
||||
│ Native Interop / WMI / Registry Layer │
|
||||
└─────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### 1.2 Key Architectural Principles
|
||||
|
||||
- **Module-based design**: Each hardware subsystem (CPU, RAM, GPU, Disk, Motherboard, etc.) is an independent module that
|
||||
can be enabled/disabled.
|
||||
- **Lazy initialization**: Hardware probes are lazy-loaded to keep startup fast.
|
||||
- **Async/await throughout**: All hardware reads are non-blocking to keep the UI responsive.
|
||||
- **Dependency Injection**: A central `IServiceCollection` wires up all probers and services.
|
||||
- **No external heavyweight dependencies**: Prefer P/Invoke, WMI, and native Windows APIs over big NuGet packages; small source-only code-gen libraries (`Microsoft.Windows.CsWin32`, `CpuId`) are acceptable.
|
||||
|
||||
---
|
||||
|
||||
## 2. Solution Structure
|
||||
|
||||
```
|
||||
AidaLite/
|
||||
├── AidaLite.sln
|
||||
├── src/
|
||||
│ ├── AidaLite.Core/ # Shared models, interfaces, utilities
|
||||
│ │ ├── Models/
|
||||
│ │ │ ├── CpuInfo.cs
|
||||
│ │ │ ├── MemoryInfo.cs
|
||||
│ │ │ ├── GpuInfo.cs
|
||||
│ │ │ ├── DiskInfo.cs
|
||||
│ │ │ ├── MotherboardInfo.cs
|
||||
│ │ │ └── SystemInfo.cs
|
||||
│ │ ├── Interfaces/
|
||||
│ │ │ ├── IHardwareProber.cs
|
||||
│ │ │ ├── ICpuProber.cs
|
||||
│ │ │ ├── IMemoryProber.cs
|
||||
│ │ │ ├── IGpuProber.cs
|
||||
│ │ │ ├── IDiskProber.cs
|
||||
│ │ │ └── IBenchmarkRunner.cs
|
||||
│ │ └── Utilities/
|
||||
│ │ ├── NativeInterop.cs
|
||||
│ │ └── WmiHelper.cs
|
||||
│ │
|
||||
│ ├── AidaLite.Probes/ # Hardware probing implementations
|
||||
│ │ ├── CpuProber.cs
|
||||
│ │ ├── MemoryProber.cs
|
||||
│ │ ├── GpuProber.cs
|
||||
│ │ ├── DiskProber.cs
|
||||
│ │ ├── MotherboardProber.cs
|
||||
│ │ └── BenchmarkRunner.cs
|
||||
│ │
|
||||
│ ├── AidaLite.Benchmarks/ # Benchmarking engines
|
||||
│ │ ├── CpuBenchmark.cs
|
||||
│ │ ├── MemoryBenchmark.cs
|
||||
│ │ └── DiskBenchmark.cs
|
||||
│ │
|
||||
│ └── AidaLite.App/ # WPF application shell
|
||||
│ ├── App.xaml
|
||||
│ ├── App.xaml.cs
|
||||
│ ├── Views/
|
||||
│ │ ├── MainWindow.xaml
|
||||
│ │ ├── CpuTab.xaml
|
||||
│ │ ├── MemoryTab.xaml
|
||||
│ │ ├── GpuTab.xaml
|
||||
│ │ ├── DiskTab.xaml
|
||||
│ │ ├── BenchmarksTab.xaml
|
||||
│ │ └── SensorTab.xaml
|
||||
│ ├── ViewModels/
|
||||
│ │ ├── MainViewModel.cs
|
||||
│ │ ├── CpuViewModel.cs
|
||||
│ │ ├── MemoryViewModel.cs
|
||||
│ │ ├── GpuViewModel.cs
|
||||
│ │ ├── DiskViewModel.cs
|
||||
│ │ └── BenchmarkViewModel.cs
|
||||
│ └── Resources/
|
||||
│ └── Styles.xaml
|
||||
├── tests/
|
||||
│ └── AidaLite.Tests/
|
||||
└── README.md
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 3. Core Components
|
||||
|
||||
### 3.1 Hardware Abstraction Layer (HAL)
|
||||
|
||||
Each prober implements a common `IHardwareProber` interface:
|
||||
|
||||
```csharp
|
||||
public interface IHardwareProber
|
||||
{
|
||||
string Name { get; }
|
||||
Task ProbeAsync(CancellationToken ct = default);
|
||||
}
|
||||
```
|
||||
|
||||
Specialized interfaces extend this:
|
||||
| Prober | Key Data Points | Primary Source |
|
||||
|----------------|----------------------------------------------------------|-----------------------------------------|
|
||||
| **CpuProber** | Vendor, model, cores, threads, speed, cache, instruction sets | WMI `Win32_Processor` (primary); tiny source-only CPUID package for feature flags |
|
||||
| **MemoryProber** | Total, free, speed, type (DDR4/5), slot count, latency | WMI `Win32_PhysicalMemory`, Performance Counters |
|
||||
| **GpuProber** | Name, VRAM, driver version, resolution | DXGI (`IDXGIFactory1`, `IDXGIAdapter1`) via Microsoft.Windows.CsWin32 (no P/Invoke to d3d11.dll) |
|
||||
| **DiskProber** | Model, size, type (SSD/HDD/NVMe), firmware, SMART status | WMI `Win32_DiskDrive`, `Win32_LogicalDisk`; `MSFT_PhysicalDisk` (Storage Spaces API) for reliable SSD/HDD/NVMe bus-type discrimination, Storage Spaces API |
|
||||
| **MotherboardProber** | Manufacturer, model, BIOS version/date | WMI `Win32_BaseBoard`, `Win32_BIOS` |
|
||||
|
||||
### 3.2 Native Interop Strategy
|
||||
|
||||
| Capability | Technique | Notes |
|
||||
|-------------------------|------------------------------------------------|------------------------------------|
|
||||
| CPUID | P/Invoke `cpuid` via inline assembly or `System.Runtime.Intrinsics` | For vendor, family, features |
|
||||
| CPU Speed | `QueryPerformanceCounter` | Accurate clock reading |
|
||||
| GPU Info | DXGI (`IDXGIFactory1`, `IDXGIAdapter1`) | P/Invoke into `d3d11.dll` |
|
||||
| SMART Data (optional) | IOCTL to `CreateFile` on disk handle | Requires admin privileges |
|
||||
| Sensor Data (optional) | WMI `MSAcpi_ThermalZoneTemperature` | Limited coverage; note in UI |
|
||||
|
||||
### 3.3 Benchmarking Engine
|
||||
|
||||
Inspired by CPU-Z's benchmark tab:
|
||||
|
||||
- **CPU Benchmark**: Single-threaded and multi-threaded integer + floating-point loops using `System.Numerics` intrinsics.
|
||||
- **Memory Benchmark**: Read/write bandwidth test using large buffer copies.
|
||||
- **Disk Benchmark**: Sequential read/write with increasing block sizes (4KB → 4MB).
|
||||
- **Scoring**: Normalize results to a baseline score (e.g., 1 core @ 1 GHz = 1.0 point).
|
||||
- **Execution**: Run on a background `Task`, report progress via `IProgress<double>`.
|
||||
|
||||
---
|
||||
|
||||
## 4. UI Design (Inspired by CPU-Z)
|
||||
|
||||
### 4.1 Layout
|
||||
|
||||
A single `MainWindow` with a **TabControl** at the top:
|
||||
|
||||
```
|
||||
┌──────────────────────────────────────────────────────────┐
|
||||
│ AidaLite [─][□][×] │
|
||||
├──────────────────────────────────────────────────────────┤
|
||||
│ [ CPU ] [ Memory ] [ GPU ] [ Disk ] [ Benchmarks ] [ Sensors ] │
|
||||
├──────────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ Tab content area │
|
||||
│ - Read-only text fields (key-value pairs) │
|
||||
│ - Optional small charts for sensors / benchmarks │
|
||||
│ │
|
||||
└──────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### 4.2 Design Principles
|
||||
|
||||
- **Compact and dense**: Small fonts (11–12px), tight padding, monospace font for values.
|
||||
- **Read-only**: No editing; pure information display.
|
||||
- **Auto-refresh**: Poll sensors/benchmarks every N seconds (configurable, default 2s) only when the tab is active.
|
||||
- **Light theme by default**, with optional dark theme via resource dictionary swap.
|
||||
|
||||
---
|
||||
|
||||
## 5. Technical Stack
|
||||
|
||||
| Concern | Choice | Justification |
|
||||
|--------------------|------------------------------------------|----------------------------------------|
|
||||
| Language | C# (latest, .NET 10) | Modern language features |
|
||||
| UI Framework | WPF | Native Windows desktop, XAML, mature |
|
||||
| MVVM Library | CommunityToolkit.Mvvm | Lightweight, no heavy DI framework |
|
||||
| DI Container | Built-in `Microsoft.Extensions.DependencyInjection` | Native to .NET 10 |
|
||||
| WMI Access | `System.Management` | Standard WMI queries |
|
||||
| Native Interop | `D3dCompiler` P/Invoke, `System.Runtime.InteropServices` | CPUID, DXGI |
|
||||
| Performance | `System.Diagnostics.Stopwatch`, Performance Counters | Benchmarking |
|
||||
| Logging | `Microsoft.Extensions.Logging` (optional, off by default) | Debugging |
|
||||
| Build | MSBuild / `dotnet build` | Standard .NET tooling |
|
||||
|
||||
---
|
||||
|
||||
## 6. Development Milestones
|
||||
|
||||
### Phase 1 – Foundation (Week 1)
|
||||
- [ ] Create solution, projects, folder structure
|
||||
- [ ] Set up WPF shell with TabControl and empty tabs
|
||||
- [ ] Implement `IHardwareProber` interface and DI registration (Introduce `IWmiHelper` test seam for WMI abstractions)
|
||||
- [ ] Create base `MainWindow` layout matching CPU-Z style
|
||||
|
||||
### Phase 2 – Core Probes (Week 2–3)
|
||||
- [ ] Implement `CpuProber` (CPUID + WMI)
|
||||
- [ ] Implement `MemoryProber` (WMI + Performance Counters)
|
||||
- [ ] Implement `GpuProber` (DXGI)
|
||||
- [ ] Implement `DiskProber` (WMI)
|
||||
- [ ] Implement `MotherboardProber` (WMI)
|
||||
- [ ] Wire each prober to its tab ViewModel
|
||||
|
||||
### Phase 3 – Benchmarks (Week 4)
|
||||
- [ ] Implement `CpuBenchmark` (single/multi-thread)
|
||||
- [ ] Implement `MemoryBenchmark` (bandwidth)
|
||||
- [ ] Implement `DiskBenchmark` (sequential I/O)
|
||||
- [ ] Add benchmark UI with progress and result display
|
||||
|
||||
### Phase 4 – Polish & Sensors (Week 5)
|
||||
- [ ] Add sensor polling (CPU temp if available, disk health)
|
||||
- [ ] Add auto-refresh logic per tab
|
||||
- [ ] Dark/light theme toggle
|
||||
- [ ] Optional: export report to JSON/HTML
|
||||
|
||||
### Phase 5 – Testing & Release (Week 6)
|
||||
- [ ] Unit tests for probers (mock WMI where possible)
|
||||
- [ ] Integration testing on 2–3 different machines
|
||||
- [ ] Packaging as self-contained single-file executable
|
||||
- [ ] Write `README.md` with features and known limitations
|
||||
|
||||
---
|
||||
|
||||
## 7. Known Limitations & Assumptions
|
||||
|
||||
- **Windows-only** (WPF is Windows-centric).
|
||||
- **Sensor data is limited**: Not all hardware exposes temperature/power via WMI. Clearly mark "N/A" when unavailable.
|
||||
- **SMART data requires admin privileges**: Optional; degrade gracefully if not elevated.
|
||||
- **GPU benchmarking is basic**: Full 3D benchmarking would require a D3D11 render loop; defer to a future phase.
|
||||
- **No Linux/macOS support** in v1.
|
||||
|
||||
---
|
||||
|
||||
## 8. Future Enhancements (Post-v1)
|
||||
|
||||
- [ ] Full 3D GPU benchmark using D3D11/OpenGL interop
|
||||
- [ ] Network benchmark (bandwidth test to localhost or remote)
|
||||
- [ ] Hardware monitoring with real-time graphs (using `SkiaSharp` for lightweight charting)
|
||||
- [ ] Plugin system for community-contributed probes
|
||||
- [ ] Linux support via Avalonia (same Core/Probes projects, swap WPF for Avalonia UI)
|
||||
- [ ] Tray icon with quick CPU/RAM status
|
||||
Reference in new issue
Block a user