6 年磨一剑!纯 C# 全自研轻量 UI 引擎|内核 < 200KB + .NET8 AOT 跨平台
这是一个历经 6 年业余时间打磨的全链路自研纯 C# 用户态跨平台 UI 引擎。从 WinForms + GDI 起步,经历多次架构重构,最终定型为 GLFW + SkiaSharp 深度融合方案。
技术背景与演进
当前 PC 客户端开发多基于以下技术体系:
- .NET 官方框架:WinForms / WPF / WinUI / .NET MAUI
- 开源跨平台方案:Avalonia
- Web 套壳技术:Electron / Tauri
- C++ 原生框架:Qt
绝大多数开发者选择在这些成熟框架之上做二次封装。但真正愿意从源头开始,全链路自研一套 UI 引擎的开发者少之又少。本引擎正是从 0 到 1 完全自研,涵盖渲染管线、视图布局系统、动画调度、虚拟滚动、事件分发、主题体系及状态管理,形成全链路闭环,可满足 90% 以上的桌面客户端 UI 需求。
核心设计理念
与传统 XML 或重量级框架不同,本引擎坚持小而精的设计理念:
- 原子组件:只提供最基础的 Text/Input/Icon 等,复杂组件通过积木式组合实现。
- 无冗余设计:不内置臃肿组件,保持最轻量、最灵活、最可定制的核心优势。
- 函数式编程:思想贴近 React / Flutter / Jetpack Compose,现代前端/移动端开发者可快速上手。
- 原生渲染:全程无黑盒、无深度封装、无 Web 套壳、无浏览器内核,回归原生渲染本质。
引擎核心亮点
- 极轻量:纯 C# 用户态实现,Release 核心 DLL < 200KB
- 高性能:百万级数据列表轻松稳定 60fps+
- 跨平台:支持 .NET8 AOT 原生发布,已验证 Windows / Ubuntu,macOS 理论 100% 支持
- 现代化架构:函数组合式 API + 状态对象驱动界面重组
- 自研优化:无 Timer 高性能动画系统、脏矩形局部刷新、底层对象池复用(SKPaint/SKFont/SKBitmap)
- 渲染底座:窗口对接 Silk.NET.GLFW,渲染基于 SkiaSharp
基础组件 & 扩展能力
内置基础组件包括:Text, Input, Icon, Row, Column, Flow, LazyRow, LazyColumn, LazyGrid, PopupCard。
复杂组件如 DataGrid、TreeView、图表等,均可通过基础组件积木式组合实现,无需重写底层。
代码示例与实现细节
在定义视图时,我们采用类似函数式组合的方式声明结构。下面是一个包含响应式状态和动画交互的简单示例:
ContentView(() => {
// 垂直布局
Column(() => {
// 响应式状态
var counterNum = StateValueOf(0);
Text()
.H3()
.Binding(counterNum, (builder, num) => {
builder.TextValue($"计数器:{num}");
}, true);
// 无 Timer 循环动画
var visibleState = StateValueOf(true);
var animateValue = AnimateFloatOf(visibleState, animate => {
animate.Duration = 800;
animate.Times = int.MaxValue;
animate.Delay = 200;
animate.Interpolator = XAnimationInterpolator.Uniform;
});
Icon(SvgResources.CircleProgress)
.Size(32)
.Binding(animateValue, (builder, value) => builder.Rotate(value * 360));
// 点击交互
Text("点击增加计数")
.PrimaryButton()
.Click(() => counterNum.Value++);
})
.Size(WRAP)
.Space(10);
});
这段代码展示了如何通过 StateValueOf 驱动界面重组,以及利用自研动画系统实现旋转效果。实际运行中,这种机制能有效减少 GC 压力,因为元素结构无冗余设计,内存占用极低。
性能表现与 Demo
项目已实现多个高难度场景 Demo,包括百万数据高性能虚拟滚动列表、仿微信 PC 端主界面、饼图/柱状图/折线图/仪表盘等。
关于 AOT 编译原生 exe,解压即可运行。exe + 非托管库共约 24MB,其中引擎自身 < 200KB,体积主要来自 .NET 运行时 + Skia + GLFW。首次启动稍慢属于磁盘缓存 + GL 上下文 + Skia 初始化的正常现象,二次启动秒开。
关于 AI 与底层壁垒
AI 可以快速生成页面业务代码,但无法自研底层引擎。渲染管线、布局算法、虚拟滚动、脏矩形刷新、动画调度、内存池、深度性能优化……这些底层架构与多年沉淀的核心技术,才是真正壁垒,只会越来越稀缺。
后续计划
本项目为 6 年全自研成果,首次公开分享。后续将逐步开放使用文档、开发教程、函数式 UI 编写指南、底层技术原理讲解(布局、渲染、动画、虚拟滚动)、架构设计与性能优化细节,并探索开源与社区共建计划。


