您的位置:首页 > 其它

如何简易的提高吞吐量

2015-10-26 22:02 246 查看
性能提升还是那几个要素,就像我在之前的博文里面提到的一样,这一篇只是更加简单一点而已。

因为硬件配置是固定的,那我们只是简单说一说在使用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,或者自行编写的缓存来作为中间件,然后再讲具体入库的操作,放入之前编写好的队列处理里面。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: