perf: reduce diagnostics and queued dispatch allocations in 2.3.2
Publish UPM package / publish (push) Successful in 2s
Publish NuGet packages / publish (push) Canceled after 3m12s

This commit is contained in:
cneicy committed 2026-11-06 20:52:09 +08:00
1 parent 901ad18453
commit 0449e82c0c
8 files changed
+152 -36

No files matched your search

+14 -6
View File
@@ -166,23 +166,31 @@ public static class GlobalHandlers
}
```
Unity ILPostProcessor 会生成直接调用桥和静态模块初始化注册;纯 .NET incremental generator 要求 subscriber 是 `partial`,并生成 ValueTask handler 绑定。生产路径不枚举程序集和方法,不使用 `MethodInfo.Invoke`、`DynamicInvoke` 或 `object[]` 参数。
Unity ILPostProcessor 会生成直接调用桥和静态模块初始化注册;NuGet 包通过 `ShrinkSDK.CodeGen` 生成绑定。生产路径不枚举程序集和方法,不使用 `MethodInfo.Invoke`、`DynamicInvoke` 或 `object[]` 参数。
## Unity 与纯 .NET
Unity 包依赖 UniTask:
Unity 和正式 NuGet 包 `ShrinkSDK.EventBus` 均使用 UniTask,可直接 `await`:
```csharp
UniTask<ShrinkPostResult> PostAsync<TEvent>(...)
```
纯 .NET 实现在 `Tools~/DotNet/ShrinkEventBus.Core`:
普通 C# 项目无需安装 Unity 或 Godot。使用 .NET 8 或更新 SDK 新建控制台项目后配置包源并安装:
```csharp
ValueTask<ShrinkPostResult> PostAsync<TEvent>(...)
```shell
dotnet new console -n EventBusDemo
cd EventBusDemo
dotnet new nugetconfig
dotnet nuget add source https://git.crash.work/api/packages/ShrinkSDK/nuget/index.json --name ShrinkSDK --configfile nuget.config
dotnet add package ShrinkSDK.EventBus --version 2.3.2
```
两边共享事件与特性契约,awaitable 和调度实现按宿主选择,不把 UniTask/ValueTask 写进事件数据。
UniTask、Runtime.Abstractions 和构建时 CodeGen 会随包自动还原,不需要手动添加分析器或项目引用。完整可运行示例见 [Samples~/DotNetConsole](Samples~/DotNetConsole/Program.cs),可用它替换新项目的 `Program.cs` 后执行 `dotnet run -c Release`。
控制台和后台服务建议显式创建 `Inline`、`DedicatedThread` 或 `TaskPool` Bus。`MainThread` 跨线程派发及 `PostDeferred` 需要宿主提供可用的主线程调度器;普通控制台没有 Unity/Godot 的帧循环。
`Tools~/DotNet/ShrinkEventBus.Core` 是独立的 ValueTask 工具实现,不是上述正式 NuGet 包的运行时。事件数据不应依赖 UniTask/ValueTask。
## ECS/Burst