- 博客(37)
- 收藏
- 关注
原创 用struct替代class后,内存占用竟然更大了
本文通过性能测试对比class与struct在内存分配上的差异,发现struct因默认采用Sequential布局未进行内存对齐,导致实际占用内存更高。而class使用Auto布局可自动优化对齐,减少填充字节。通过StructLayout(LayoutKind.Auto)显式设置后,struct内存分配显著降低,甚至优于class。结论:结构体并非一定更省内存,合理布局(如Auto)至关重要。
2026-10-29 08:15:00
477
原创 项目里一堆if ContainsKey,这不是经典面试题吗
虽然大部分情况下这不会成为性能瓶颈,但是无论性能还是可读性,TryGetValue都比ContainsKey+dic[key]要更好,最近在项目里发现了一堆ContainsKey+dic[key]。但2026年了,这应该成为肌肉记忆了。于是写了一篇性能测试加强一下记忆。
2026-09-15 08:00:00
179
原创 Unity Editor实现一个比AssetDatabase.FindAssets内存和CPU都更友好的替代方案
最近在做一个unity编辑器项目,需要找到在某个路径下,名字包含“ArtPrefab”的预制体。这导致AssetDatabase.FindAssets被频繁调用,而它会返回完整的string[]= 0)源码中还用了Distinct().ToArray(),性能进一步下降。但实际上我们的需求并不需要遍历所有找到的预制体,遍历时,找到需要的预制体就可以返回了。这导致了大量没用的内存分配。if (!return;
2026-08-17 08:30:00
167
原创 Protobuf根据Varint编码优化序列化
本文总结了Protobuf编码优化建议:1)常用字段编号应小于15以减少存储空间;2)负数值应使用sint类型提高编码效率。通过C#代码示例演示了不同字段编号和数据类型对序列化结果的影响:小字段编号生成更紧凑的Tag(如编号1仅需1字节),而负数采用sint类型(如sint32)比int32节省9字节空间。文中还提供了十六进制打印方法用于验证编码结果,并附有Protobuf官方编码文档链接供参考。
2026-07-22 08:00:00
36
原创 C# 谁是短字符串拼接之王
在开发过程中,我们经常会遇到短字符串拼接的情况,例如需要打印状态信息,进度信息("20/100")等,那么多的拼接方法,哪个又好又快呢。今天写了一个benchmark看一下。
2026-07-14 08:00:00
172
原创 C# 过滤数据的三种姿势:yield return、LINQ Where、ToList 全景性能对决
C# 过滤数据的三种姿势:yield return、LINQ Where、ToList 全景性能对决
2026-07-07 08:15:00
215
原创 什么!?Unity的SetTrigger(string name)不能用了?
原因是,SetTrigger(string name)内部还会计算一次Animator.StringToHash()先说结论,Unity 尽量避免。
2026-06-05 07:45:00
250
原创 Unity 优化只读属性{get;}读取性能
属性读取] 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帧。
2026-06-03 08:45:00
235
原创 Unity有限状态机 一个支持消息调度系统的泛型状态机
推荐在项目中都建立这两个类// 一些自定义方法 }// 一些自定义方法 }// 一些自定义方法 }// 一些自定义方法 }// 一些自定义方法 } public class Bob : BaseGameEntity {get;set;} }// 一些自定义方法 } public class Bob : BaseGameEntity {get;set;} }// 一些自定义方法// 一些自定义方法 } public class Bob : BaseGameEntity {
2026-03-03 08:00:00
1292
原创 【温故】设计原则:依赖倒置原则
最近在读《敏捷软件开发 原则、模式与实践》,里面提到了几大设计原则,于是想复习下,并且用C#把文中代码重新写一遍。
2026-02-12 08:30:00
111
原创 【温故】设计原则:接口隔离原则
最近在读《敏捷软件开发 原则、模式与实践》,里面提到了几大设计原则,于是想复习下,并且用C#把文中代码重新写一遍。
2026-02-10 12:05:47
285
原创 【温故】设计原则: 里氏替换原则
最近在读《敏捷软件开发 原则、模式与实践》,里面提到了几大设计原则,于是想复习下,并且用C#把文中代码重新写一遍。
2026-02-06 08:00:00
1447
原创 跨服务器连接表
datasrc=“192.168.1.114” --要访问的服务器。@server=‘Test’,–被访问的服务器别名。–删除映射(录与链接服务器上远程登录之间的映射)‘Test’, --被访问的服务器别名。–删除远程服务器链接。‘sa’, --帐号。
2025-11-15 12:30:00
139
转载 找出所有项目引用了哪些 NuGet 包、版本号、对应项目路径,并筛选出“同一个包名但版本不同”的情况。
本文介绍了如何通过PowerShell脚本扫描解决方案中所有.csproj文件,检测NuGet包版本不一致的问题。最后以表格形式输出冲突的包名及其在不同项目中的版本号。这种方法可帮助开发者快速定位并解决依赖版本冲突问题。
2025-09-22 11:39:08
80
原创 docker 部署 redmine 挂载mysql到宿主机,以及常见问题解决
例如,建 Feature 类型 → 字段里必须填「目标版本」「预计工时」;工作流只能走「新建 → 已确认 → 实现中 → 已解决 → 已关闭」。将容器目录挂载到宿主机。D:\ProgramData\redmine-data\files 改成自己的。生成 128 位十六进制字符串(64 字节)把输出的 128 位字符串复制下来,粘贴到。记得改redmine的mysql账号密码。mysql建库和用户(密码自己改)
2025-09-16 12:15:00
348
原创 ‘D:\Program‘ is not recognized as an internal or external command, operable program or batch file.
解决报错 : 'D:\Program' is not recognized as an internal or external command,operable program or batch file.
2025-03-27 10:43:43
678
原创 element-plus el-popover 点击其他区域关闭弹出框
使用时,也可以做到点击其他区域关闭弹出框,但是当按钮是禁用状态也会显示弹出框,这时候需要使用虚拟触发来解决。
2023-06-29 19:30:38
3655
1
原创 element和element-plus8小时时差问题解决
有很多博客的解决方案是在提交到后端接口之前调用moment的utcOffset方法手动修改8小时时差,但这样做太麻烦了。这里给出element和element-plus两个版本更优雅的解决方案。核心就是要增加属性,但是由于element和element-plus的日期格式不一致,所以大小写有所区别,大小写写错的话是没有效果的。
2023-05-26 11:04:10
1630
1
原创 将逗号分割的字符串存入临时表,并用做查询条件
1.方法定义:ALTER FUNCTION [dbo].[splitIds] ( @String VARCHAR(MAX), @Delimiter VARCHAR(MAX)) RETURNS @temptable TABLE (items VARCHAR(MAX)) ASBEGIN DECLARE @idx INT=1 DECLARE @slice VARCHAR(MAX) IF LEN(@String) < 1 OR LEN(ISNULL(@Strin
2023-03-14 20:29:20
242
原创 No component for supporting the service System.IServiceProvider was found
Castle.MicroKernel.ComponentNotFoundException:“No component for supporting the service System.IServiceProvider was found”问题解决
2023-02-15 15:39:53
879
转载 ABP .NET6 使用 EF Core 7 ExecuteUpdate实现批量更新并监测生成的SQL
EF7 面向 .NET 6,因此可与 .NET 6 (LTS) 或 .NET 7 一起使用。
2022-11-21 21:04:14
1938
原创 如何使用ABP的Profile类配置AutoMapper自定义映射
一、ABP的Profile有什么用?Profile用来编写AutoMapper的映射规则,在Profile类构造方法中编写的规则最后会配置到AutoMapper中,实现实体到DTO的自动映射。二、代码浅析1.ABP模板中,应用层的Module类有一个Initialize方法,该方法中用反射找到所有继承于Profile的类,并添加到映射配置。public override void Initialize(){ var thisAssembly = typeof(EpiApplicationM
2021-09-22 20:28:49
1594
原创 测试Linq GroupBy DateTime时间3种方式的性能表现
先说结论:按日期分组时,优先考虑用字符串方式对日期分组var result = query.GroupBy( x => x.Time.ToString("yyyy/MM/dd"), (key, models) => new Output { Date = key, Count = models.Count() });目录先说结论:
2021-07-01 11:40:09
910
原创 .NET Core 2.1下 ONLYOFFICE的回调处理程序
官方文档链接: Callback handler.二级标题三级标题四级标题五级标题六级标题
2020-09-02 09:59:47
2499
Learn Unity DOTS! -Make An Awesome RTS -Code Monkey
2024-12-28
How to Make a Multiplayer Game with DOTS-Turbo Makes Games-Johnny Thompson
2024-12-27
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅