<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[ZZHSourceCode的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/ZZHSourceCode</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; ZZHSourceCode]]></copyright><item><title><![CDATA[用 CollectionsMarshal 优化字典读写速度]]></title><link>https://blog.youkuaiyun.com/ZZHSourceCode/article/details/169944256</link><guid>https://blog.youkuaiyun.com/ZZHSourceCode/article/details/169944256</guid><author>ZZHSourceCode</author><pubDate>Wed, 04 Nov 2026 08:15:00 +0800</pubDate><description><![CDATA[用一个**“字典里高频更新某个值”**的场景来举例，这是最容易体现价值的地方。]]></description><category></category></item><item><title><![CDATA[用struct替代class后，内存占用竟然更大了]]></title><link>https://blog.youkuaiyun.com/ZZHSourceCode/article/details/169167169</link><guid>https://blog.youkuaiyun.com/ZZHSourceCode/article/details/169167169</guid><author>ZZHSourceCode</author><pubDate>Thu, 29 Oct 2026 08:15:00 +0800</pubDate><description><![CDATA[本文通过性能测试对比class与struct在内存分配上的差异，发现struct因默认采用Sequential布局未进行内存对齐，导致实际占用内存更高。而class使用Auto布局可自动优化对齐，减少填充字节。通过StructLayout(LayoutKind.Auto)显式设置后，struct内存分配显著降低，甚至优于class。结论：结构体并非一定更省内存，合理布局（如Auto）至关重要。]]></description><category></category></item><item><title><![CDATA[项目里一堆if ContainsKey，这不是经典面试题吗]]></title><link>https://blog.youkuaiyun.com/ZZHSourceCode/article/details/165360039</link><guid>https://blog.youkuaiyun.com/ZZHSourceCode/article/details/165360039</guid><author>ZZHSourceCode</author><pubDate>Tue, 15 Sep 2026 08:00:00 +0800</pubDate><description><![CDATA[虽然大部分情况下这不会成为性能瓶颈，但是无论性能还是可读性，TryGetValue都比ContainsKey+dic[key]要更好，最近在项目里发现了一堆ContainsKey+dic[key]。但2026年了，这应该成为肌肉记忆了。于是写了一篇性能测试加强一下记忆。]]></description><category></category></item><item><title><![CDATA[Unity Editor实现一个比AssetDatabase.FindAssets内存和CPU都更友好的替代方案]]></title><link>https://blog.youkuaiyun.com/ZZHSourceCode/article/details/163774789</link><guid>https://blog.youkuaiyun.com/ZZHSourceCode/article/details/163774789</guid><author>ZZHSourceCode</author><pubDate>Mon, 17 Aug 2026 08:30:00 +0800</pubDate><description><![CDATA[最近在做一个unity编辑器项目，需要找到在某个路径下，名字包含“ArtPrefab”的预制体。这导致AssetDatabase.FindAssets被频繁调用，而它会返回完整的string[]= 0)源码中还用了Distinct().ToArray()，性能进一步下降。但实际上我们的需求并不需要遍历所有找到的预制体，遍历时，找到需要的预制体就可以返回了。这导致了大量没用的内存分配。if (!return;]]></description><category></category></item><item><title><![CDATA[Protobuf根据Varint编码优化序列化]]></title><link>https://blog.youkuaiyun.com/ZZHSourceCode/article/details/163080741</link><guid>https://blog.youkuaiyun.com/ZZHSourceCode/article/details/163080741</guid><author>ZZHSourceCode</author><pubDate>Wed, 22 Jul 2026 08:00:00 +0800</pubDate><description><![CDATA[本文总结了Protobuf编码优化建议：1）常用字段编号应小于15以减少存储空间；2）负数值应使用sint类型提高编码效率。通过C#代码示例演示了不同字段编号和数据类型对序列化结果的影响：小字段编号生成更紧凑的Tag（如编号1仅需1字节），而负数采用sint类型（如sint32）比int32节省9字节空间。文中还提供了十六进制打印方法用于验证编码结果，并附有Protobuf官方编码文档链接供参考。]]></description><category></category></item><item><title><![CDATA[C# 谁是短字符串拼接之王]]></title><link>https://blog.youkuaiyun.com/ZZHSourceCode/article/details/162693660</link><guid>https://blog.youkuaiyun.com/ZZHSourceCode/article/details/162693660</guid><author>ZZHSourceCode</author><pubDate>Tue, 14 Jul 2026 08:00:00 +0800</pubDate><description><![CDATA[在开发过程中，我们经常会遇到短字符串拼接的情况，例如需要打印状态信息，进度信息（"20/100"）等，那么多的拼接方法，哪个又好又快呢。今天写了一个benchmark看一下。]]></description><category></category></item><item><title><![CDATA[C# 过滤数据的三种姿势：yield return、LINQ Where、ToList 全景性能对决]]></title><link>https://blog.youkuaiyun.com/ZZHSourceCode/article/details/162633327</link><guid>https://blog.youkuaiyun.com/ZZHSourceCode/article/details/162633327</guid><author>ZZHSourceCode</author><pubDate>Tue, 07 Jul 2026 08:15:00 +0800</pubDate><description><![CDATA[C# 过滤数据的三种姿势：yield return、LINQ Where、ToList 全景性能对决]]></description><category></category></item><item><title><![CDATA[什么！？Unity的SetTrigger(string name)不能用了？]]></title><link>https://blog.youkuaiyun.com/ZZHSourceCode/article/details/161628153</link><guid>https://blog.youkuaiyun.com/ZZHSourceCode/article/details/161628153</guid><author>ZZHSourceCode</author><pubDate>Fri, 05 Jun 2026 07:45:00 +0800</pubDate><description><![CDATA[原因是，SetTrigger(string name)内部还会计算一次Animator.StringToHash()先说结论，Unity 尽量避免。]]></description><category></category></item><item><title><![CDATA[Unity 优化只读属性{get；}读取性能]]></title><link>https://blog.youkuaiyun.com/ZZHSourceCode/article/details/161622867</link><guid>https://blog.youkuaiyun.com/ZZHSourceCode/article/details/161622867</guid><author>ZZHSourceCode</author><pubDate>Wed, 03 Jun 2026 08:45:00 +0800</pubDate><description><![CDATA[属性读取]         7 ms | 单次: 7.00 ns | 倍率: 2.33x。[帧模拟-属性]      6 ms / 10000 | 倍率: 3.00x。[字段读取]         3 ms | 单次: 3.00 ns。[字段写入]         3 ms | 单次: 3.00 ns。[属性修改]         6 ms | 单次: 6.00 ns。[帧模拟-字段]      2 ms / 10000帧。]]></description><category></category></item><item><title><![CDATA[行为树简介]]></title><link>https://blog.youkuaiyun.com/ZZHSourceCode/article/details/158887482</link><guid>https://blog.youkuaiyun.com/ZZHSourceCode/article/details/158887482</guid><author>ZZHSourceCode</author><pubDate>Wed, 11 Mar 2026 08:00:00 +0800</pubDate><description><![CDATA[本文大致介绍了行为树是什么，适合用于复习行为树的概念，或对行为树做一个大致了解。]]></description><category></category></item><item><title><![CDATA[Unity有限状态机 一个支持消息调度系统的泛型状态机]]></title><link>https://blog.youkuaiyun.com/ZZHSourceCode/article/details/158575722</link><guid>https://blog.youkuaiyun.com/ZZHSourceCode/article/details/158575722</guid><author>ZZHSourceCode</author><pubDate>Tue, 03 Mar 2026 08:00:00 +0800</pubDate><description><![CDATA[推荐在项目中都建立这两个类// 一些自定义方法 }// 一些自定义方法 }// 一些自定义方法 }// 一些自定义方法 }// 一些自定义方法 } public class Bob : BaseGameEntity {get;set;} }// 一些自定义方法 } public class Bob : BaseGameEntity {get;set;} }// 一些自定义方法// 一些自定义方法 } public class Bob : BaseGameEntity {]]></description><category></category></item><item><title><![CDATA[【温故】设计原则：依赖倒置原则]]></title><link>https://blog.youkuaiyun.com/ZZHSourceCode/article/details/157979475</link><guid>https://blog.youkuaiyun.com/ZZHSourceCode/article/details/157979475</guid><author>ZZHSourceCode</author><pubDate>Thu, 12 Feb 2026 08:30:00 +0800</pubDate><description><![CDATA[最近在读《敏捷软件开发 原则、模式与实践》，里面提到了几大设计原则，于是想复习下，并且用C#把文中代码重新写一遍。]]></description><category></category></item><item><title><![CDATA[【温故】设计原则：接口隔离原则]]></title><link>https://blog.youkuaiyun.com/ZZHSourceCode/article/details/157872846</link><guid>https://blog.youkuaiyun.com/ZZHSourceCode/article/details/157872846</guid><author>ZZHSourceCode</author><pubDate>Tue, 10 Feb 2026 12:05:47 +0800</pubDate><description><![CDATA[最近在读《敏捷软件开发 原则、模式与实践》，里面提到了几大设计原则，于是想复习下，并且用C#把文中代码重新写一遍。]]></description><category></category></item><item><title><![CDATA[【温故】设计原则： 里氏替换原则]]></title><link>https://blog.youkuaiyun.com/ZZHSourceCode/article/details/157767208</link><guid>https://blog.youkuaiyun.com/ZZHSourceCode/article/details/157767208</guid><author>ZZHSourceCode</author><pubDate>Fri, 06 Feb 2026 08:00:00 +0800</pubDate><description><![CDATA[最近在读《敏捷软件开发 原则、模式与实践》，里面提到了几大设计原则，于是想复习下，并且用C#把文中代码重新写一遍。]]></description><category></category></item><item><title><![CDATA[【温故】设计原则： 开闭原则]]></title><link>https://blog.youkuaiyun.com/ZZHSourceCode/article/details/157620769</link><guid>https://blog.youkuaiyun.com/ZZHSourceCode/article/details/157620769</guid><author>ZZHSourceCode</author><pubDate>Tue, 03 Feb 2026 08:30:00 +0800</pubDate><description><![CDATA[最近在读《敏捷软件开发 原则、模式与实践》，里面提到了几大设计原则，于是想复习下，并且用C#把文中代码重新写一遍。]]></description><category></category></item><item><title><![CDATA[VS常用警告配置]]></title><link>https://blog.youkuaiyun.com/ZZHSourceCode/article/details/155267435</link><guid>https://blog.youkuaiyun.com/ZZHSourceCode/article/details/155267435</guid><author>ZZHSourceCode</author><pubDate>Thu, 27 Nov 2025 12:30:00 +0800</pubDate><description><![CDATA[【代码】VS常用警告配置。]]></description><category></category></item><item><title><![CDATA[去重sql 留下相同数据中id最小的数据]]></title><link>https://blog.youkuaiyun.com/ZZHSourceCode/article/details/137112070</link><guid>https://blog.youkuaiyun.com/ZZHSourceCode/article/details/137112070</guid><author>ZZHSourceCode</author><pubDate>Wed, 26 Nov 2025 11:52:01 +0800</pubDate><description><![CDATA[留下相同数据中id最小的数据。]]></description><category></category></item><item><title><![CDATA[跨服务器连接表]]></title><link>https://blog.youkuaiyun.com/ZZHSourceCode/article/details/136877610</link><guid>https://blog.youkuaiyun.com/ZZHSourceCode/article/details/136877610</guid><author>ZZHSourceCode</author><pubDate>Sat, 15 Nov 2025 12:30:00 +0800</pubDate><description><![CDATA[datasrc=“192.168.1.114” --要访问的服务器。@server=‘Test’,–被访问的服务器别名。–删除映射（录与链接服务器上远程登录之间的映射）‘Test’, --被访问的服务器别名。–删除远程服务器链接。‘sa’, --帐号。]]></description><category></category></item><item><title><![CDATA[找出所有项目引用了哪些 NuGet 包、版本号、对应项目路径，并筛选出“同一个包名但版本不同”的情况。]]></title><link>https://blog.youkuaiyun.com/ZZHSourceCode/article/details/151958911</link><guid>https://blog.youkuaiyun.com/ZZHSourceCode/article/details/151958911</guid><author>ZZHSourceCode</author><pubDate>Mon, 22 Sep 2025 11:39:08 +0800</pubDate><description><![CDATA[本文介绍了如何通过PowerShell脚本扫描解决方案中所有.csproj文件，检测NuGet包版本不一致的问题。最后以表格形式输出冲突的包名及其在不同项目中的版本号。这种方法可帮助开发者快速定位并解决依赖版本冲突问题。]]></description><category></category></item><item><title><![CDATA[docker 部署 redmine 挂载mysql到宿主机，以及常见问题解决]]></title><link>https://blog.youkuaiyun.com/ZZHSourceCode/article/details/151705874</link><guid>https://blog.youkuaiyun.com/ZZHSourceCode/article/details/151705874</guid><author>ZZHSourceCode</author><pubDate>Tue, 16 Sep 2025 12:15:00 +0800</pubDate><description><![CDATA[例如，建 Feature 类型 → 字段里必须填「目标版本」「预计工时」；工作流只能走「新建 → 已确认 → 实现中 → 已解决 → 已关闭」。将容器目录挂载到宿主机。D:\ProgramData\redmine-data\files 改成自己的。生成 128 位十六进制字符串（64 字节）把输出的 128 位字符串复制下来，粘贴到。记得改redmine的mysql账号密码。mysql建库和用户（密码自己改）]]></description><category></category></item></channel></rss>