
【导航菜单】可进行切换导航、登录、外观设置等操作。平台方面涵盖 AI 代码创作、开发者工作流、应用程序安全、探索等内容。其中AI 代码创作包括 GitHub Copilot、GitHub Copilot 应用程序、MCP 注册表等开发者工作流有 Actions、Codespaces、Issues 等应用程序安全涉及 GitHub Advanced Security、代码安全、密钥保护等探索包含为何选择 GitHub、文档、博客等。还有按公司规模、用例、行业划分的解决方案以及按主题、类型探索的资源开源社区和项目企业版解决方案及附加组件等。此外还有定价、搜索、提供反馈、保存的搜索等功能。【Cysharp/MemoryPack 仓库信息】该仓库公开有通知、分支、星标等相关信息还包含代码、问题、拉取请求、操作、模型、安全与质量、洞察等导航选项。文件夹和文件有 .github、docs、sandbox 等有 640 次提交记录。【MemoryPack 介绍】MemoryPack 是适用于 C# 和 Unity 的零编码、极致性能的二进制序列化工具。与 System.Text.Json、protobuf - net 等工具对比在 .NET 7 / Ryzen 9 5950X 机器上测试对于标准对象它比其他二进制序列化工具快 10 倍比其他二进制序列化工具快 2 - 5 倍对于结构体数组速度比其他序列化工具快 50 - 200 倍。它是作者的第 4 个序列化工具此前还创建了 ZeroFormatter、Utf8Json、MessagePack for C# 等。其速度快是因为采用专门为 C# 优化的二进制格式基于作者以往经验精心调优且是全新设计利用了 .NET 7 和 C# 11 以及增量源生成器支持 .NET Standard 2.1 和 Unity。其他序列化工具会执行许多编码操作而 MemoryPack 格式采用零编码设计尽可能直接复制 C# 内存类似于 FlatBuffers但序列化目标是 POCO。【MemoryPack 特性】除高性能外MemoryPack 还具备支持现代 I/O API、基于源生成器的代码生成、无反射的非泛型 API、可将数据反序列化到现有实例中、支持多态联合序列化、支持有限和完全的版本兼容性、支持循环引用序列化、基于 PipeWriter/Reader 的流式序列化、支持 TypeScript 代码生成和 ASP.NET Core 格式化器、通过 .NET 源生成器支持 Unity2021.3IL2CPP 等特性。【安装】该库通过 NuGet 进行分发为获最佳性能建议使用 .NET 7最低要求是 .NET Standard 2.1。代码编辑器需支持 Roslyn 4.3.1如 Visual Studio 2022 版本 17.3、.NET SDK 6.0.401。对于 Unity要求和安装过程不同。【快速开始】定义要序列化的结构体或类用 [MemoryPackable] 属性和 partial 关键字标注。序列化代码由 C# 源生成器功能生成实现了 IMemoryPackableT 接口。调用 MemoryPackSerializer.SerializeT/DeserializeT 方法来序列化/反序列化对象实例Serialize 方法支持多种返回类型和输出目标Deserialize 方法支持多种输入类型还有非泛型版本的方法。【内置支持的类型】包括 .NET 基元类型、非托管类型、string、decimal 等多种类型以及各种数组、集合、接口等。【定义 [MemoryPackable] 类/结构体/记录/记录结构体】[MemoryPackable] 可标注多种类型。若类型是 struct 或 record struct 且不包含引用类型则无需额外标注可直接序列化/反序列化。否则默认序列化公共实例属性或字段可用 [MemoryPackIgnore] 排除[MemoryPackInclude] 提升私有成员为序列化目标。成员顺序重要MemoryPack 按成员声明顺序序列化字段有继承关系时按父类 - 子类顺序反序列化时成员顺序不能更改。也可使用 [MemoryPackable(SerializeLayout.Explicit)] 和 [MemoryPackOrder()] 选择显式布局。【构造函数选择】MemoryPack 支持带参数和无参数的构造函数选择规则如下若存在 [MemoryPackConstructor]则使用该构造函数若无显式构造函数使用无参数构造函数若只有一个构造函数使用该构造函数若有多个构造函数必须在所需构造函数上应用 [MemoryPackConstructor] 属性否则生成器会发出错误信息使用带参数的构造函数时所有参数名称必须与相应的成员名称匹配不区分大小写。【序列化回调】在序列化/反序列化时可使用 [MemoryPackOnSerializing]、[MemoryPackOnSerialized]、[MemoryPackOnDeserializing]、[MemoryPackOnDeserialized] 属性调用序列化前后的事件这些属性可标注静态和实例方法以及公共和私有方法。回调函数允许使用无参数方法和 ref reader/writer, ref T value 方法若为 ref value 设置值可更改用于序列化/反序列化的值。【定义自定义集合】标注了 [MemoryPackObject] 的集合类型应使用 GenerateType.Collection 来正确序列化。【静态构造函数】MemoryPackable 类不能定义静态构造函数可定义 static partial void StaticConstructor() 实现相同功能。【多态联合】MemoryPack 支持序列化接口和抽象类对象实现多态序列化称为联合。只有接口和抽象类才能用 [MemoryPackUnion] 属性标注需唯一的联合标签标签允许使用 0 到 65535 的值小于 250 时效率更高。若接口和派生类型位于不同程序集可用 MemoryPackUnionFormatterAttribute 代替格式化器会自动注册但 Unity 不支持需手动注册。联合也可通过 DynamicUnionFormatterT 在代码中进行组装。【序列化 API】Serialize 方法有三个重载。