perf: reduce diagnostics and queued dispatch allocations in 2.3.2
This commit is contained in:
8 files changed
+152
-36
No files matched your search
@@ -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
|
||||
|
||||
|
||||
Reference in new issue
Block a user