c#总结最近的几项重要代码
java的代码就不说了,毕竟不是我的主业。
1.c#数据库连接池Hikari.
(1)动态加载各类数据库驱动
(2)支持简单配置文件
(3)支持按照名称多数据库调用
(4)使用简洁
单数据库使用:
HikariConfig hikariConfig = new HikariConfig();
hikariConfig.LoadConfig("Hikari.txt");
HikariDataSource hikariDataSource = new HikariDataSource(hikariConfig);
获取连接:
hikariDataSource.GetConnection();
连接池管理类获取
ManagerPool.Instance.GetDbConnection(MySql);
项目地址:
https://github.com/jinyuttt/Hikari.git
2.c#数据库封装DBQuerySharp
(1)各类数据库均有,功能齐备
(2)有SQL,NoSQL样例,完善了封装
(3)封装成了服务化模型。扩展使用和优化
(4)有查询的缓存优化样例。
整个包括了SQL数据库(连接池任意配置),本地KV数据库(berkeleydb),本地SQL数据库(Sqlite),内存SQL数据库(Sqlite),内存NOSQL数据库(redis),内存KV存储(LRU缓存)
(5)相关项目
1.sqilte 2.berkeleydb 3.一般数据库使用(通过Hikari) 4.redis 包含其他项目: 1.序列化 2.通信 3.自定义数据库连接池
项目地址:
https://github.com/jinyuttt/DBQuerySharp.git
3.本地缓存JYCache
(1)完全本地换K-V缓存
(2)实现FIFO,LRU,LFU策略
使用示例:
CacheConfig config = new CacheConfig();
config.CacheTime = 1800;//(时间都是秒)
config.Policy = CachePolicy.FIFO;//设置消失策略
ICache<int,int> cache=CacheFactory<int, int>.Create(config);
cache.CacheRemoveListener += Cache_CacheRemoveListener;
cache.Add(1, 1,10);//单独设置key保持10秒
项目地址:
https://github.com/jinyuttt/JYCache.git
4.Hash一直负载均衡LoadBalanceHash
(1)实现Hash一致算法。算法原理网上搜索很多,我就不说了。只需要搜索“Hash一致”
(2)这方面我不擅长,主要是参阅网友的东西。我的封装包括了2个项目。一个是网上原理KetamaHash .
(3)主要参阅:https://www.cnblogs.com/daizhj/archive/2010/08/24/1807324.html;
https://blog.csdn.net/cywosp/article/details/23397179/
(4)代码说明
参考网上的代码就不说了,一模一样。主要是MD5+SortedList.
这里说我测试的另外一个组合。MurmurHash+SortedList.这个是充分验证了效率的。
MurmurHash算法比较快,网上多少MD5.用法基本可以一样,但是我没有使用原来进行分组了。底层存储我测试了SortedDictionary,SortedList以及自定义红黑树(gi网友的,可以使用)。他们的主要问题都是在获取Key右侧最近的节点。都没有提供现成的。所以测试很慢。
最后测试MurmurHash+SortedList.但是多了一层封装。我将其SortedList与红黑树合并(也可以直接自己封装一个类结构,项目中也有样例)。在初始化时,数据添加到红黑树中。然后通过UpdateSort快速遍历,将数据导入SortedList存储使用,这样就启用了其中为Hash一致封装的功能TialNode.但是这里不能使用网上的方法,用linq查询,太慢。我在内部直接使用二分法进行搜索。后面说原因。采用这种办法会很快,而且直接返回最右侧的一个值。这里强调一个问题,不能使用多线程分片查询,更加慢。经过测试,每个线程都是一样的时间,和应该线程直接查询一样的时间使用。都是很短的时间大约一个线程30-800(比毫秒还小的那个单位)。我测试使用的分片方法任然在,但是不能使用。这个可能和数据量有关,一个线程的数据量没有千万级就不要测试了,二分法的方法已经够快了,一次干掉一般的数据,没有几次就结束了。
最后说说碰上的一个小问题:比较SortedDictionary, SortedList。我推荐一篇文章,是我自己查阅源码(net core)之后,认为这篇文章是真实的。博文地址:https://blog.csdn.net/ma_jiang/article/details/78600043。我比较认可。也正是由于2者的结构,所以我最后采用SortedList来实现Hash一致。
关于这个问题说2点:SortedList内存小,而且是线性数组实现的Key与value。SortedDictionary则是二叉树。查询一个是二分法,一个是二叉树。另外一个困惑是,我采用红黑树搜索居然达不到它们2者的速度,我感觉奇怪。后面我再继续测试吧。
项目地址:
https://github.com/jinyuttt/LoadBalanceHash.git
c#总结最近的几项重要代码的更多相关文章
- 详解Top命令 输出命令行选项及代码
Linux中的top命令显示系统上正在运行的进程.它是系统管理员最重要的工具之一.被广泛用于监视服务器的负载.在本篇中,我们会探索top命令的细节.top命令是一个交互命令.在运行top的时候还可以运 ...
- 在后台代码中动态生成pivot项并设置EventTrigger和Action的绑定
最近在做今日头条WP的过程中,遇到需要动态生成Pivot项的问题.第一个版本是把几个频道写死在xaml里了,事件绑定也写在xaml里,每个频道绑定一个ObservableCollection<A ...
- TFS代码变更和工作项关联,为系统变更提供完美的跟踪轨迹
TFS是微软的应用软件生命周期管理(ALM)的解决方案产品,相比我们常见的一些ALM产品,例如HP ALM, IBM Rational, Atlanssian Jira等,其最大的区别在于TFS将软件 ...
- C#程序员经常用到的10个实用代码片段
1 读取操作系统和CLR的版本 OperatingSystem os = System.Environment.OSVersion; Console.WriteLine(“Platform: {}”, ...
- C#程序开发中经常遇到的10条实用的代码
1 读取操作系统和CLR的版本 OperatingSystem os = System.Environment.OSVersion; Console.WriteLine("Platform: ...
- C#常用代码集合(1)
引用自james li的博客,地址:http://www.cnblogs.com/JamesLi2015/p/3147986.html 1 读取操作系统和CLR的版本 OperatingSys ...
- DotNetBar RibbonControl 控件动态添加项
想做个插件式开发,界面用Dotnetbar的RibbonControl,需要通过代码动态的向RibbonControl控件添加项 示例代码如下: RibbonTabItem rti = new Rib ...
- 一步步教你为网站开发Android客户端---HttpWatch抓包,HttpClient模拟POST请求,Jsoup解析HTML代码,动态更新ListView
本文面向Android初级开发者,有一定的Java和Android知识即可. 文章覆盖知识点:HttpWatch抓包,HttpClient模拟POST请求,Jsoup解析HTML代码,动态更新List ...
- ActionBar官方教程(8)ShareActionProvider与自定义操作项提供器
Adding an Action Provider Similar to an action view, an action provider replaces an action button wi ...
随机推荐
- asp.net的几种页面传值方式
1."~/x/xx.aspx?id=" + id string id=Request.Params["id"].ToString(); 2.Response.R ...
- js中的Function和Object
说到构造器(condtructor).原型链(prototype),说道Function与Object,总要祭出下面这张图 1.Function是最顶层的构造器,Object是最顶层的对象 2.先有的 ...
- Quartz使用及注意事项
Quartz使用及注意事项 前提:目前由于公司业务决定,大量使用Quartz,每天固定的时间点执行相应的业务逻辑,,几十个时间点应该是有的,某一个时间点如果没有执行带来的问题是巨大的.Quartz的稳 ...
- 基于forms组件和Ajax实现注册功能
一.基于forms组件的注册页面设计 1.运用forms组件的校验字段功能实现用户注册 views.py: (在钩子中代码解耦,将form放在cnblog/blog/Myforms.py中) f ...
- cf547D. Mike and Fish(欧拉回路)
题意 题目链接 Sol 说实话这题我到现在都不知道咋A的. 考试的时候是对任意相邻点之间连边,然后一分没有 然后改成每两个之间连一条边就A了.. 按说是可以过掉任意坐标上的点都是偶数的数据啊.. #i ...
- nodejs进阶(7)—async异步流程控制
Async介绍 Async是一个流程控制工具包,提供了直接而强大的异步功能.基于Javascript为Node.js设计,同时也可以直接在浏览器中使用. Async提供了大约20个函数,包括常用的 m ...
- 【Eclipse】在Eclipse上安装Spket
转自:https://www.cnblogs.com/HDK2016/p/7099383.html 1,Spket是什么? Spket是一种编辑javaScript和XML代码的工具,可以用他自己的 ...
- Android 自定义View之自绘控件
首先要提前声明一下,我对于自定义View的理解并不是很深,最近啃了几天guolin博主写的关于自定义View的博客,讲的非常棒,只不过涉及到源码和底层的一些东西,我自己就懵逼了,目前只是会了关于自定义 ...
- 使用本地计划任务定时关闭azure虚拟机
本文包含以下内容 前提条件 如何实现定时关闭虚拟机 前提条件 Controller 机器上必须安装 Azure PowerShell,并且要在 PowerShell 里登录一次 Azure, 请参见: ...
- Vue2自定义指令改变DOM值后未刷新data中绑定属性的值
标签(空格分隔): Vue 自定义指令用于过滤输入框,只允许输入数字: Vue.directive('numberOnly', { bind: function (el, binding) { el. ...