大部分代码库我在编写的时候都是用泛型,接口类作为参数类型; 也有一些,比如日志输出,快速序列化操作等等的内容在设计时就是为了使用方便,没有提供泛型,具体类型的方式操作,可能 会带来一些额外的性能开销。
这在一些特殊的场景,比如同时打印数千个日志?会带来灾难的性能。 这里整理出来这些方法,并提供优化方案:
有几个地方使用的是format拼接的,被自己的操作看笑了,都用stringbuilder了还format。
!5a1f8db 已经提交优化,GC时间减少了。
另外我仔细检查了一遍构建器和包裹器部分,然后顺着编写时的思路将代码喂给了ai,ai的意思是代码确实存在较大的性能开销,不过是目前用法中最优解了,没法优化了; 主要的性能消耗在序列化,以及语法糖上,因为用了很多params会在使用过程中创建临时数组对象。
比如这里的格式化,设置值的耗时较长(0.083ms),格式化(0.28ms),其他的时间都是获取值和设置文本(0.07ms)。
这里是9个文本对象生成对象池的消耗,每个对象里有三个文本,每个文本里有多组子文本。
将1偏移指定值。时间可以优化。
添加了相关的缓存
从时间刻度来看,直接用字典比颠来倒去计算要快一点点...不知道这样是否值得为此开辟两个字典。
No dependencies set.
The note is not visible to the blocked user.
大部分代码库我在编写的时候都是用泛型,接口类作为参数类型;
也有一些,比如日志输出,快速序列化操作等等的内容在设计时就是为了使用方便,没有提供泛型,具体类型的方式操作,可能 会带来一些额外的性能开销。
这在一些特殊的场景,比如同时打印数千个日志?会带来灾难的性能。
这里整理出来这些方法,并提供优化方案:
TextBlockBuilder
有几个地方使用的是format拼接的,被自己的操作看笑了,都用stringbuilder了还format。
!5a1f8db 已经提交优化,GC时间减少了。
另外我仔细检查了一遍构建器和包裹器部分,然后顺着编写时的思路将代码喂给了ai,ai的意思是代码确实存在较大的性能开销,不过是目前用法中最优解了,没法优化了;

主要的性能消耗在序列化,以及语法糖上,因为用了很多params会在使用过程中创建临时数组对象。
比如这里的格式化,设置值的耗时较长(0.083ms),格式化(0.28ms),其他的时间都是获取值和设置文本(0.07ms)。
UnionSet
这里是9个文本对象生成对象池的消耗,每个对象里有三个文本,每个文本里有多组子文本。
MacroMath.CanvertShiftNumber
将1偏移指定值。时间可以优化。
添加了相关的缓存
从时间刻度来看,直接用字典比颠来倒去计算要快一点点...不知道这样是否值得为此开辟两个字典。