如何用 WPF + .NET 10 打造 Windows 优化工具?optimizerDuck 技术栈拆解
2026/9/15 12:02:46 网站建设 项目流程

如何用 WPF + .NET 10 打造 Windows 优化工具?optimizerDuck 技术栈拆解

【免费下载链接】optimizerDuckFree, open-source Windows optimization tool for performance, privacy, and simplicity.项目地址: https://gitcode.com/GitHub_Trending/op/optimizerDuck

optimizerDuck 是一款基于 WPF + .NET 10 构建的免费开源 Windows 优化工具,专注性能、隐私与简洁。本文完整拆解 optimizerDuck 的技术栈:从 Fluent 风格 WPF 界面、反射自动注册优化项,到基于 AsyncLocal 的异步执行作用域与可回滚系统,带你了解如何用现代 .NET 技术打造一款专业的 Windows 优化工具。

一个项目解决了什么问题

默认安装的 Windows 自带大量后台服务、遥测、预装应用和计划任务,很多用户根本用不到,却在持续消耗 CPU、内存和磁盘资源。同时,不少能提升性能的设置默认并未开启。

optimizerDuck 把这些能力整合到一个界面里,核心功能包括:

  • 系统优化:40+ 项调优,覆盖 7 大分类(性能、隐私、GPU、电源、臃肿应用与服务、用户体验、AI),每项都标注风险等级
  • 自定义设置:开关、下拉框、数字输入替代注册表手工修改,按桌面 / 偏好 / 游戏 / 系统功能四类组织
  • 内置工具:系统仪表盘、启动项管理、计划任务管理、磁盘清理、臃肿应用卸载器
  • 可回滚:每次修改都会写入本地回滚文件,支持单项撤销或全部还原

技术栈总览:核心组件一览

打开项目文件 optimizerDuck/optimizerDuck.csproj,整个依赖关系一目了然:

技术版本用途
WPF(net10.0-windows10.0.17763.0.NET 10Windows 桌面 UI 框架,目标 Windows 10 17763+
WPF-UI4.3.0Fluent Design 控件、导航视图、对话框
CommunityToolkit.Mvvm8.4.2MVVM 源生成器([ObservableProperty][RelayCommand]
Microsoft.Extensions.Hosting10.0.10依赖注入 + 托管服务容器
Serilog4.4.0结构化日志,写入本地文件
Newtonsoft.Json13.0.4回滚数据 JSON 序列化
TaskScheduler2.12.2Windows 计划任务管理
System.Management.Automation7.6.4PowerShell 宿主集成
xUnit v33.2.2独立测试项目 optimizerDuck.Test/

几个值得注意的工程细节:

  • 单项目结构:应用本身只有一个 WPF 项目,没有拆分子项目,通过Domain/Services/UI/Common/目录分层
  • 管理员权限:app.manifest 声明requireAdministrator,因为工具要修改注册表和服务
  • 新解决方案格式:使用.slnx而非传统.sln

目录结构:按 MVVM 三层清晰分层

仓库根目录下的 AGENTS.md 是一份非常完善的工程说明,其中的结构约定值得借鉴:

  • Domain/— 模型、接口、特性,不依赖任何 UI
    • Optimizations/BaseOptimization基类、各分类下的具体优化项
    • Conditions/:兼容性条件系统(Windows 版本、CPU/GPU 品牌、内存阈值等)
    • Revert/:5 种回滚步骤类型(注册表、服务、计划任务、Shell 命令、USB 电源)
  • Services/— 业务逻辑:注册表 / 服务 / 计划任务 / Shell 四大 Provider、回滚管理器、系统信息快照
  • UI/— XAML 页面、ViewModel、对话框与样式
  • Common/— 扩展方法、辅助类、WPF 值转换器

这种"领域层零 UI 依赖"的分层,让优化逻辑可以被 optimizerDuck.Test/ 中的 xUnit 测试直接验证,而不需要启动界面。

亮点一:反射自动注册,新增优化项零手工登记

大多数同类工具的每个功能都要手动写一行注册代码,而 optimizerDuck 的做法是:新增一个优化项,只需在分类类里加一个嵌套类

每个优化项继承 BaseOptimization,并用特性声明元数据:

[Optimization( Id = "固定GUID", Risk = OptimizationRisk.Safe, Tags = OptimizationTags.Performance, Condition = typeof(Windows11Condition) // 可选:兼容性门控 )] public sealed class MyTweak : BaseOptimization { ... }

特性的完整定义见 OptimizationAttribute.cs。启动时,OptimizationRegistry 通过反射扫描程序集中所有IOptimizationCategory实现,再收集其嵌套的IOptimization类型并实例化。整个过程在后台线程执行,避免阻塞启动,且扫描结果有缓存。

💡 这种"约定优于配置"的注册方式,让 7 大分类、40+ 优化项的扩展成本趋近于零——没有注册数组需要维护,特性即元数据。

亮点二:AsyncLocal 执行作用域 + 文件级回滚

修改系统设置最让人担心的是"改坏了怎么办"。optimizerDuck 的设计核心是每一步修改都自动记录回滚步骤,而它靠的是一个优雅的技巧:ExecutionScope 使用AsyncLocal<ExecutionScope?>作为环境上下文。

它的工作方式:

  1. 应用优化项时开启ExecutionScope.Begin()
  2. Provider 服务(注册表、服务、计划任务、Shell)执行操作时,直接从ExecutionScope.Current读取当前作用域,自动记录回滚步骤——无需层层传参,也无需依赖注入
  3. 作用域结束时,RevertManager 把成功步骤序列化为 JSON,写入%LocalAppData%\optimizerDuck\Revert\{optimizationId}.json

工程上还做了三个防御性设计:

  • 原子写入:先写.tmpFile.Replace,崩溃不会产生半截文件
  • 并发锁:每个回滚文件配SemaphoreSlim(30 秒超时),防止竞态
  • 状态推断:是否已应用直接由"文件是否存在"推断,简单可靠

界面侧只需调用 BaseOptimization.CompleteFromScope() 从作用域直接构建执行结果,优化项本身完全不用关心回滚细节。

亮点三:兼容性条件系统

不同 Windows 版本、不同硬件的机器能用的调优并不相同。项目为此设计了独立的条件系统(Domain/Conditions/):

  • 内置条件包括 Windows11Condition、CPU/GPU 品牌判断、最低内存阈值等
  • 特性中声明Condition = typeof(...)即可门控某个优化项
  • 求值采用fail-open策略:信息不足时宁可显示、也不隐藏,避免误伤可用功能

这样同一个安装包可以在 Windows 10 与 11 上安全运行,不合适的条目自动标记为"不受支持"。

应用骨架:Generic Host 驱动 WPF

传统 WPF 应用靠App.xaml.cs里的手工装配,而 optimizerDuck 直接采用 .NET 生态标准的Host.CreateDefaultBuilder()模式(见 App.xaml.cs):

  • 所有页面与 ViewModel 以单例注册进 DI 容器
  • 配置从appsettings.json读取,绑定到AppSettings
  • Serilog 接管日志,还自定义了日志格式器让输出更易读
  • 全局捕获三类未处理异常(AppDomain / Task / Dispatcher),并落盘崩溃日志到Crashes/目录

这带来一个直接好处:应用逻辑与 UI 彻底解耦,测试项目里可以直接注入NullLogger验证真实文件与注册表 I/O,无需任何 mock 库。

国际化与测试

  • 17 种语言:资源文件集中在 Resources/Languages/,每个语言一个.resx,禁止硬编码 UI 字符串
  • 集成风格测试:optimizerDuck.Test/ 基于 xUnit v3,不引入 mock 库,全部手写测试替身;涉及 WPF 的测试运行在 STA 线程中
  • 本地构建dotnet build optimizerDuck.slnx一条命令即可从源码构建,开源项目(GPL v3)透明可审计

如何本地构建运行

克隆仓库后即可在 Windows 上构建(需管理员权限运行):

dotnet restore optimizerDuck.slnx dotnet build optimizerDuck.slnx --configuration Release --no-restore dotnet run --project optimizerDuck/optimizerDuck.csproj

详细的构建、测试与代码规范约定都写在 AGENTS.md 中,包括 CI 对齐的构建命令和测试过滤方式。

总结:可以带走的 5 个实践

  1. WPF + WPF-UI依然是构建 Fluent 风格 Windows 桌面工具的最优解,配合 .NET 10 的 Windows 目标框架开箱即用
  2. Generic Host + DI让 WPF 应用获得现代 .NET 的配置、日志与测试能力
  3. 反射 + 特性实现功能自动发现,扩展成本趋近于零
  4. AsyncLocal 环境作用域是跨层传递执行上下文的轻量方案,替代层层传参
  5. 文件即状态的回滚设计简单可靠:原子写入 + 并发锁 + 文件存在性推断

从技术栈选型到工程细节,optimizerDuck 为"用 WPF + .NET 10 打造系统级工具"提供了一个完整可参考的样本。

【免费下载链接】optimizerDuckFree, open-source Windows optimization tool for performance, privacy, and simplicity.项目地址: https://gitcode.com/GitHub_Trending/op/optimizerDuck

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询