随笔分类 - c#
c#
摘要:一直有很多转载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还存在什么问题?
阅读全文
摘要:0. 前言 上接:AOP有几种实现方式 接下来说说怎么做AOP的demo,先用csharp 说下动态编织和静态编织,有时间再说点java的对应内容。 第一篇先说Roslyn 怎么做个JIT的AOP demo。 为啥这样讲呢? 实际是因为Roslyn 已经包含了JIT的全部部分,那我也就不用说任何JI
阅读全文
摘要:1. 回顾 AOP 是什么? 维基百科解释如下: 面向切面的程序设计(Aspect-oriented programming,AOP,又译作面向方面的程序设计、剖面导向程序设计)是计算机科学中的一种程序设计思想,旨在将横切关注点与业务主体进行进一步分离,以提高程序代码的模块化程度。通过在现有代码基础
阅读全文
摘要:Polly 弹性瞬时错误处理库 Polly是一个C#实现的弹性瞬时错误处理库 它可以帮助我们做一些容错模式处理,比如: 超时与重试(Timeout and Retry) 熔断器(Circuit Breaker) 舱壁隔离(Bulkhead Isolation) 回退(Fallback) 使用也是非常
阅读全文
摘要:Norns.Urd 是什么? Norns.Urd 是一个基于emit实现动态代理的轻量级AOP框架. 版本基于 netstandard2.0. 所以哪些.net 版本能用你懂的。 完成这个框架的目的主要出自于个人以下意愿: 静态AOP和动态AOP都实现一次 如果不实现DI,怎么将AOP框架实现与其他
阅读全文

浙公网安备 33010602011771号