随笔分类 - c#
c#
摘要:记录一下最近sv.db的完善 1. 让查询可以使用 json path 有时候我们会存储 json 到 db,也有时会只取json部分数据,或者通过json部分数据进行过滤 所以sv.db 也支持这些场景,(目前只有 db 实现,json的操作都是依靠db json 函数) 举例: 数据 a.Exe
阅读全文
摘要:为什么要写 为什么要写,大概就是沉没成本吧 只是从Source Generators出来开始,就打算以其研究是否能做 aop (现在已经有内置功能了),本来当年就想尝试能否在 orm 做一些尝试,可惜种种原因,自己都忘了这个打算了 直到今年7月份,才又想起了这个打算,现在精力不行了,本来研究一下原理
阅读全文
摘要:探索一下 Enum 优化 SV.Enums主要是探索如何让 enum 更高效 其中涉及的优化手段并非完全自创 很多内容参考于以下项目 NetEscapades.EnumGenerators FastEnum runtime 主要优化手段 其实主要全是 空间换时间,大量缓存 封装入口方法以及 sour
阅读全文
摘要:明明有更好的hash方法 (ps: 添加 XxHash32 测试, XxHash32 大小写敏感) 有位朋友对我吐槽前几天我列举的在源生成器的生成db映射实体的优化点 提前生成部分 hashcode 进行比较 所示代码 public static void GenerateReadTokens(th
阅读全文
摘要:一直有很多转载dotnet对Interceptor说明文档的,但鲜有说明Interceptor如何使用的,这里写一篇简单示例来展示一下 c# 12 实验特性Interceptor 是什么? 官方解释如下(其实简单说就是语言特性中内置的静态编织方式的aop功能,不同于其他il修改代码的方式,使用上得结
阅读全文
摘要:优化 在上一篇留下的 Dapper AOT 还有什么特别优化点的问题 在仔细阅读生成代码和源码之后,终于得到了答案 个人之前一直以为 Dapper AOT 只用了迭代器去实现,所以理应差不多实现代码却又极大差距,思维陷入了僵局,一度以为有什么黑魔法 结果 Dapper AOT 没有用迭代器去实现!!
阅读全文
摘要:优化 上一次实验 代码写的较为随意,本次穷尽所学,优化了一把, 不过果然还是没 比过 Dapper aot, 虽然没使用 Interceptor, 但理论上其优化不该有这么大差距 知识差距不少呀,都看不懂 Dapper aot 利用了什么姿势领先, 有大神们能教教吗? 优化点 减少类型判断 提前 做
阅读全文
摘要:好奇 SourceGenerator 出现开始,好几年了,虽然一直好奇用SourceGenerator 生成代码 与 emit 等动态生成的代码会有多少差距, 但是一直特别懒,不想搞 其实 dapper aot 项目做了类似事情,不过功能特别积极,还引用了实验特性,所以还是想更为简单客观对比 本次乘
阅读全文
摘要:ReadOnlySpan<T> 可以说现在高性能操作的重要基石 其原理有兴趣的同学可以看 2018 的介绍Span<T>文章 其为了保障大家安全使用做了相应的限制 那么有没方法绕过呢? 在class中持有 ReadOnlySpan 直接持有是不可能的,本身为 ref struct 就保障了大家写不出
阅读全文
摘要:篇幅较长,所以首先列举结果,也就是我们的目的 核心目的为探索特定场景对不同类型数据进行统一抽象,并达到足够高性能,也就是一份代码实现,对不同类型数据依然高性能 以下为结果,也就是我们的目的: 对1w行 csv 数据的string进行 RFC4180 csv标准进行解析, string 类型 csv
阅读全文
摘要:上一篇 用 HexColor 作为示例,可能过于简单 这里再补充一个 ini 解析的示例 由于实在写不动用其他库解析 ini 了, 春节都要过完了,累了,写不动了, 所以随意找了一份解析ini的库, 仅供参考,对比不准确,毕竟完整库包含了更多功能 先看看结果 BenchmarkDotNet v0.1
阅读全文
摘要:前因 在春节前了解到 Rust语言有一个叫 nom 的解析库 它可以让你创建安全的解析器,而不会占用内存或影响性能。 它依靠 Rust 强大的类型系统和内存安全来生成既正确又高效的解析器,并使用函数,宏和特征来抽象出容易出错的管道。 nom 核心是解析器组合器,而解析器组合器是高阶函数,可以接受多个
阅读全文
摘要:Ulid ULID :Universally Unique Lexicographically Sortable Identifier(通用唯一词典分类标识符) c# 实现库 : https://github.com/Cysharp/Ulid ULID特性 ulid() # 01ARZ3NDEKTS
阅读全文
摘要:Norns.Urd.HttpClient Norns.Urd.HttpClient 基于AOP框架 Norns.Urd实现, 是对 System.Net.Http下的 HttpClient封装,让大家只需简单在接口定义就可以实现http的调用,可以减少一些重复代码的书写。 可以和已有的 Norns.
阅读全文
摘要:#0. 前言 之前写了几篇文章介绍了一些AOP的知识, 但是还没有亮出来AOP的姿势, 也许姿势漂亮一点, 大家会对AOP有点兴趣 内容大致会分为如下几篇:(毕竟人懒,一下子写完太累了,没有动力) AOP的姿势之 简化 MemoryCache 使用方式 AOP的姿势之 简化混用 MemoryCach
阅读全文
摘要:#0. 前言 首先立马解释一波为啥会有这样一篇伪标题的Demo随笔呢? 不是本人有知识误区,或者要误人子弟 因为大家都知道emit写出来的都是同步方法,不可能await,至少现在这么多年来没有提供对应的功能 这是之前某天在微信群看见讨论怎么emit一个异步方法并包装异步结构,简单几句文字也未能清晰的
阅读全文
摘要:0. 前言 之前写了几篇文章介绍了一些AOP的知识, 但是还没有亮出来AOP的姿势, 也许姿势漂亮一点, 大家会对AOP有点兴趣 内容大致会分为如下几篇:(毕竟人懒,一下子写完太累了,没有动力) AOP的姿势之 简化 MemoryCache 使用方式 AOP的姿势之 简化混用 MemoryCache
阅读全文
摘要:0. 前言 上接:思想无语言边界:以 cglib 介绍 AOP 在 java 的一个实现方式 作为第四篇,我们回顾一下 csharp 里面比较常见动态编织实现方式emit 内容安排如下: emit aop demo Norns.Urd 1. emit aop demo 1.1 emit 介绍 e
阅读全文
摘要:0. 前言 上接:基于 Source Generators 做个 AOP 静态编织小实验 作为第三篇,我们基于cglib在java做一个简单的aop例子, 以此简单作为例子说一个思路在什么样的语言里面都是共同的,这是骨,不要纠结什么语言什么实现,这只是皮。 同以前一样,是个人随笔,不是新手教学,不会
阅读全文
摘要:0. 前言 上接:用 Roslyn 做个 JIT 的 AOP 作为第二篇,我们基于Source Generators做个AOP静态编织小实验。 内容安排如下: source generators 是什么? 做个达到上篇Jit 一样的效果的demo source generators还存在什么问题?
阅读全文