优化代码效率 #42

Open
opened 2026-03-02 14:07:37 +08:00 by lrss3 · 3 comments
Owner

大部分代码库我在编写的时候都是用泛型,接口类作为参数类型;
也有一些,比如日志输出,快速序列化操作等等的内容在设计时就是为了使用方便,没有提供泛型,具体类型的方式操作,可能 会带来一些额外的性能开销。

这在一些特殊的场景,比如同时打印数千个日志?会带来灾难的性能。
这里整理出来这些方法,并提供优化方案:

大部分代码库我在编写的时候都是用泛型,接口类作为参数类型; 也有一些,比如日志输出,快速序列化操作等等的内容在设计时就是为了使用方便,没有提供泛型,具体类型的方式操作,可能 会带来一些额外的性能开销。 这在一些特殊的场景,比如同时打印数千个日志?会带来灾难的性能。 这里整理出来这些方法,并提供优化方案:
lrss3 added the help wanted label 2026-03-02 14:07:37 +08:00
Author
Owner

TextBlockBuilder

有几个地方使用的是format拼接的,被自己的操作看笑了,都用stringbuilder了还format。

image.png

!5a1f8db 已经提交优化,GC时间减少了。

另外我仔细检查了一遍构建器和包裹器部分,然后顺着编写时的思路将代码喂给了ai,ai的意思是代码确实存在较大的性能开销,不过是目前用法中最优解了,没法优化了;
主要的性能消耗在序列化,以及语法糖上,因为用了很多params会在使用过程中创建临时数组对象。
image.png

image.png

比如这里的格式化,设置值的耗时较长(0.083ms),格式化(0.28ms),其他的时间都是获取值和设置文本(0.07ms)。

# TextBlockBuilder 有几个地方使用的是format拼接的,被自己的操作看笑了,都用stringbuilder了还format。 <img width="651" alt="image.png" src="attachments/db09ba90-abcb-4f78-8b36-f6677f5b302c"> !5a1f8db 已经提交优化,GC时间减少了。 另外我仔细检查了一遍构建器和包裹器部分,然后顺着编写时的思路将代码喂给了ai,ai的意思是代码确实存在较大的性能开销,不过是目前用法中最优解了,没法优化了; 主要的性能消耗在序列化,以及语法糖上,因为用了很多params会在使用过程中创建临时数组对象。 ![image.png](/attachments/d95cd854-ab90-41a2-a71a-87ee1a77b33f) <img width="2072" alt="image.png" src="attachments/098b64bf-b757-4d1c-82f7-d821c9682358"> 比如这里的格式化,设置值的耗时较长(0.083ms),格式化(0.28ms),其他的时间都是获取值和设置文本(0.07ms)。
Author
Owner

UnionSet

这里是9个文本对象生成对象池的消耗,每个对象里有三个文本,每个文本里有多组子文本。

image.png image.png
# UnionSet 这里是9个文本对象生成对象池的消耗,每个对象里有三个文本,每个文本里有多组子文本。 <img width="2026" alt="image.png" src="attachments/1f04bbd3-4517-4048-b10b-25c7b6d91dcd"> <img width="695" alt="image.png" src="attachments/7f3ad500-f07f-4cab-b73e-1ed0a0394cbc">
139 KiB
228 KiB
Author
Owner

MacroMath.CanvertShiftNumber

将1偏移指定值。时间可以优化。

image.png image.png

添加了相关的缓存

image.png image.png

从时间刻度来看,直接用字典比颠来倒去计算要快一点点...不知道这样是否值得为此开辟两个字典。

# MacroMath.CanvertShiftNumber 将1偏移指定值。时间可以优化。 <img width="413" alt="image.png" src="attachments/666958c2-d002-49d3-a71d-f404bd757031"> <img width="430" alt="image.png" src="attachments/73e696ab-e92a-450e-9ef7-b4708b385632"> 添加了相关的缓存 <img width="480" alt="image.png" src="attachments/0e22034d-937d-4ae4-ace0-20a80cd6decc"> <img width="366" alt="image.png" src="attachments/1f263e08-bd02-40b7-bfb8-bb33a4609be6"> 从时间刻度来看,直接用字典比颠来倒去计算要快一点点...不知道这样是否值得为此开辟两个字典。
Sign in to join this conversation.