去年的时候无意中发现,Npgsql在连接入池时,只是简单的调用了unlisten和deallocate清理会话,这可能会导致一些会话属性(比如临时对象)残留。于是提交了一个Patch,对于支持Discard语句的Server,使用Discard All清理。然而很快就被发现这样会把一些初始连接参数,比如search_path也清掉,于是这个Patch就被搁置了。
前段时间重新修改了Patch再次向Npgsql社区提交,中间有遇到许多波折,改了几次,今天终于被Francisco Figueiredo Jr.合并到代码里去了。
https://github.com/franciscojunior/Npgsql2/pull/74
修改之后,对于默认的V3协议,初始会话属性大部分都通过StartupPackage送到服务器,剩余的几个必须通过SET的,也合在一起送到服务器。而以前是通过多个SET分别送的,所以修改之后也顺带提高了一点点连接速度。