如何简易的提高吞吐量
2015-10-26 22:02
246 查看
性能提升还是那几个要素,就像我在之前的博文里面提到的一样,这一篇只是更加简单一点而已。
因为硬件配置是固定的,那我们只是简单说一说在使用C#进行开发的项目中,如何使用一些简单的小招数让性能有一个比较大幅度的显著提升。
一、绕开那些烦人却又不可避免的DB操作。
DB操作是不可避免却又是项目重中之中的所在,那我们可以做哪些优化呢?
首先,根据业务将DB操作分为需要即时和非即时的两块,关于非即时的我们可以将其单独的交给某一个线程来单独慢慢处理。代码如下:
View Code
另外关于为什么不选用Task来做处理,虽然Task关于线程的处理还是很优秀的,这里请各位同僚自行定夺。关于即时性的DB操作,则可以以Redis,MongoDb,或者自行编写的缓存来作为中间件,然后再讲具体入库的操作,放入之前编写好的队列处理里面。
因为硬件配置是固定的,那我们只是简单说一说在使用C#进行开发的项目中,如何使用一些简单的小招数让性能有一个比较大幅度的显著提升。
一、绕开那些烦人却又不可避免的DB操作。
DB操作是不可避免却又是项目重中之中的所在,那我们可以做哪些优化呢?
首先,根据业务将DB操作分为需要即时和非即时的两块,关于非即时的我们可以将其单独的交给某一个线程来单独慢慢处理。代码如下:
public class DbQueueManage { private int _threadNumber = 2; private DbQueue[] _dbQueues; private Random random = new Random(); private DbQueueManage() { } static DbQueueManage() { } private static readonly object _syncObject = new object(); private static DbQueueManage _instance; public static DbQueueManage Instance { get { if (_instance == null) { lock (_syncObject) { if (_instance == null) { _instance = new DbQueueManage(); } } } return _instance; } } public void Init(Action action, int threadNum = 2) { if (_dbQueues == null) { this._threadNumber = threadNum; _dbQueues = new DbQueue[threadNum]; for (var i = 0; i < threadNum; i++) { _dbQueues[i] = new DbQueue(); } } } public void Push(Action action) { var index = GetRandomThreadIndex(); if (_dbQueues != null && _dbQueues.Length > index) { _dbQueues[index].Push(action); } } public int GetRandomThreadIndex() { return random.Next(0, this._threadNumber); } }
View Code
另外关于为什么不选用Task来做处理,虽然Task关于线程的处理还是很优秀的,这里请各位同僚自行定夺。关于即时性的DB操作,则可以以Redis,MongoDb,或者自行编写的缓存来作为中间件,然后再讲具体入库的操作,放入之前编写好的队列处理里面。
相关文章推荐
- 垃圾回收进程的调试(gc模块)
- 蓝懿iOS 技术内容和心得 10。26
- 企业应用方案记录
- Ubuntu的个人化初始配置
- memache集群之虚拟机下的magent
- 有关->
- NOIP 2013 货车运输
- ViewPager实现自动滑动和下面小圆点可根据图片大小来自适应
- Spring依赖注入
- lintcode 中等题: 3 Sum II 三数之和II
- 设置table中的td内容位置
- C 语言中结构体引用符号"."和"->"的区别
- 超简单方法实现省/市/地区级联查询
- 大规模图的存储(前向星、next数组)
- JAVA中Process类的用法(感觉不错)
- Eclipse自动提示
- 为什么面试要问hashmap 的原理
- Linux 下报错:A Java RunTime Environment (JRE) or Java Development Kit (JDK) must解决方案
- Leetcode -- Candy
- 大规模图的存储(前向星、next数组)