随笔分类 - 程序开发
摘要:http://www.nynaeve.net/?p=80 Debugger flow control: Hardware breakpoints vs software breakpoints In debugging parlance, there are two kinds of breakpo
阅读全文
摘要:C#和C++的交互如果自己写代码,一方面繁琐,另一方面容易出错,再者就是代码不太规范。 最近看了一下PInvoke.net的东西,可以直接使用官方写好的。 下面是使用Pinvoke.net打开设备的一个例子。 private void openDeviceButton_Click(object se
阅读全文
摘要:https://learn.microsoft.com/en-us/archive/msdn-magazine/2017/may/net-core-cross-platform-code-generation-with-roslyn-and-net-core https://www.tugberku
阅读全文
摘要:C#的序列化库很多通过注解Attribute来实现,比如Protobuf-net,Messagepack等。如果手动添加注解,会比较麻烦,尤其在切换序列化库的时候,需要更改对应的注解。 这里实现了一个使用Mono.Cecil来自动添加注解的类,当程序编译后,会修改对应的dll来实现效果。 遇到的坑:
阅读全文
摘要:最近用反射,想找到一个接口的父接口,发现baseType是null。 但是dotpeek反射里面显示是有baseType的。 搜了一下,意识到你只能 implement 一个接口,而不能inherit一个接口。所以一个接口想找到父接口应该再次使用GetInterfaces函数。
阅读全文
摘要:《TCP/IP Illustrated Volume1 The Protocols》第14章的总结中提到 Karn’s algorithm removes the retransmission ambiguity problem by preventing the use of RTT measur
阅读全文
摘要:简介 不管是RPC还是IPC,本质都是通过某种寻址方式调用另一个**工作单元(线程)**的函数(subroutine)。 此处工作单元可以是主机(host),进程(process),线程(thread)。最终函数将在某个主机上的某个进程里的某个线程中执行。 为了简化情况,我们假设一台主机上只运行一个
阅读全文
摘要:网络发送数据包,现成的接口Socket.Send在我的电脑上大概会有700us左右的耗时,如果使用SendAsync开销会更大,并且会导致数据包的乱序。 Send阻塞接口慢的原因一方面底层会跑很多代码,另一方面有线程就有竞争,有竞争就有加锁。 于是写了一个轻量的Queue来加速网络发包,平均耗时从7
阅读全文
摘要:https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/attributes/caller-information C#获取调用方的信息,没找到类相关的信息 public void DoProcessing() { Tra
阅读全文
摘要:###如果不设置DontFragment udpClient.DontFragment = false; 那么可以发送数据包。接收端随缘收到数据包。使用WireShark可以检测到网卡上对应的数据包。 如果设置DontFragment udpClient.DontFragment = true; 在
阅读全文
摘要:https://keithbabinec.com/2018/06/12/how-to-capture-and-debug-net-application-crash-dumps-in-windows/ 默认情况下Windows Error Reporting会处理异常,可以用“事件查看器”查看。 可
阅读全文
摘要:《Pro .NET Memory Management》 Chapter6 P428 中讲道大对象(包括Obj对象头部等,总字节占85000及以上)和有finalizer的对象生成的构造函数(JIT_New)会更为复杂,因此开销会更大。对此做了验证。小对象使用辅助函数JIT_TrialAllocSF
阅读全文
摘要:《Pro .NET Memory Management》第4章 Sample Program in Depth小节有讲。 先从应用商店下载Windbg 然后设置高级启动变量 • Executable: C:\Program Files\dotnet\dotnet.exe • Arguments: \
阅读全文
摘要:魔改redis之添加命令hrandmember 正文 前言 想从redis的hash表获取随机的键值对,但是发现redis只支持set的随机值SRANDMEMBER。但是如果把hash表中的数据又存一份,占用的空间又太大。也可以通过先HLEN获取hash表的大小,随机出一个偏移值,再调用HSCAN获
阅读全文
摘要:redis4.0的持久化 简介 虽然redis是内存数据库,但它也提供了持久化的功能。其中rdb持久化可以定时备份用于回滚,而aof持久化则更接近数据库最新的状态,服务器重启后可以恢复至最新的状态。两者数据备份的粒度不同,rdb将整个数据库备份,aof持久化粒度更为小,但生成的文件更大。如果有多个线
阅读全文
摘要:redis4.0的时间事件与expire 简介 时间事件和文件事件有着相似的接口,他们都在aeProcessEvents中被调用。不同的是文件事件底层委托给 select,epoll等多路复用接口。而时间事件通过每个tick检查时间事件的触发时间是否已经到期。redis4.0版本中只注册了一个时间事
阅读全文
摘要:redis4.0的命令 简介 正文 redisCommand与redisCommandTable 所有的命令一开始都位于server.c文件起始位置的redisCommandTable中,在观察redisCommandTable表之前,我们先看一下redisCommand结构体。 typedef v
阅读全文
摘要:简介 feign对微服务之间的http调用做了一层封装,如果B项目想调用A项目的一个web服务,只需要编写对应的接口并标注FeignClient注解。但如果接口发生了变更,对应的Feign代码往往会忘记修改,而且问题往往在服务启动之后才能发现。 feign-maven-plugin根据当前项目的ja
阅读全文
摘要:redis4.0的文件事件与客户端 简介 文件事件的流程大概如下: 在服务器初始化时生成aeEventLoop并赋值给server,接着创建监听TCP连接事件。 处理TCP连接时会创建client类型的对象,将其绑定在accept函数返回的文件描述符fd上,并对fd注册一个可读事件,当客户端数据来临
阅读全文
摘要:redis4.0的启动流程 简介 redis 在接收客户端连接之前,大概做了以下几件事情: 初始化服务端配置 初始化服务器 进入事件主循环 正文 全局server对象 在redis中,有一个全局的对象server保存了redis服务器对象的信息,redis服务器的操作都围绕着该对象展开。下文中当提及
阅读全文

浙公网安备 33010602011771号