中文字幕日韩一区二区_国产一区二区av_国产毛片av_久久久久国产一区_色婷婷电影_国产一区二区精品

【原創(chuàng)】c#實(shí)現(xiàn)用SQL池(多線程),定時(shí)批量執(zhí)行SQL語(yǔ)句

  在實(shí)際項(xiàng)目開(kāi)發(fā)中,業(yè)務(wù)邏輯層的處理速度往往很快,特別是在開(kāi)發(fā)Socket通信服務(wù)的時(shí)候,網(wǎng)絡(luò)傳輸很快,但是一旦加上數(shù)據(jù)庫(kù)操作,性能一落千丈,數(shù)據(jù)庫(kù)操作的效率往往成為一個(gè)系統(tǒng)整體性能的瓶頸。面對(duì)這問(wèn)題,我們?cè)趺崔k呢?好,下面我就為大家介紹一種方法:構(gòu)建SQL池,分離業(yè)務(wù)邏輯層和數(shù)據(jù)訪問(wèn)層,讓業(yè)務(wù)邏輯層從低效的數(shù)據(jù)庫(kù)操作解脫,以提高系統(tǒng)整體性能。

(一)SQL池

  SQL池是SQL容器,用于存放業(yè)務(wù)邏輯層拋過(guò)來(lái)的SQL語(yǔ)句。SQL池主要提供以下幾種方法:

  1)internal string Pop(),從池中取出SQL。

  2)internal void Push(string item),增加一個(gè)SQL到池中。

  3)internal string[] Clear(),清空SQL池,清空前,返回SQL池中所有SQL語(yǔ)句。

  特別提醒一下,SQL池是面向多線程的,所以必須對(duì)公共資源SQL采取鎖機(jī)制。這里采用互斥鎖,當(dāng)業(yè)務(wù)邏輯層線程往SQL池中拋入SQL語(yǔ)句時(shí),禁止SQL執(zhí)行線程執(zhí)行SQL語(yǔ)句,反之,當(dāng)SQL執(zhí)行線程執(zhí)行SQL語(yǔ)句時(shí),也不允許業(yè)務(wù)邏輯層線程往SQL池中拋入SQL語(yǔ)句。為什么要這么做?因?yàn)镾QL執(zhí)行線程是批量執(zhí)行SQL語(yǔ)句,在批量執(zhí)行SQL語(yǔ)句前,會(huì)從池中取出所有SQL語(yǔ)句,如果此時(shí)業(yè)務(wù)邏輯層線程往SQL池中拋入SQL語(yǔ)句,則會(huì)導(dǎo)致這些SQL語(yǔ)句丟失,得不到執(zhí)行。

  下面是SQL池代碼:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;

namespace Test1
{
sealed class SQLPool
{
//互斥鎖
public static Mutex mutexSQLPool = new Mutex();

//SQL池
Stack<string> pool;

/// <summary>
/// 初始化SQL池
/// </summary>
internal SQLPool()
{
this.pool = new Stack<string>();
}


/// <summary>
/// 獲取SQL池?cái)?shù)量
/// </summary>
internal Int32 Count
{
get { return this.pool.Count; }
}


/// <summary>
/// 從池中取出SQL
/// </summary>
/// <returns></returns>
internal string Pop()
{
lock (this.pool)
{
return this.pool.Pop();
}
}


/// <summary>
/// 增加一個(gè)SQL到池中
/// </summary>
/// <param name="item"></param>
internal void Push(string item)
{
if (item.Trim() == "")
{
throw new ArgumentNullException("Items added to a SQLPool cannot be null");
}

//此處向SQL池中push SQL必須與Clear互斥
mutexSQLPool.WaitOne();
try
{
this.pool.Push(item); //此處如果出錯(cuò),則不會(huì)執(zhí)行ReleaseMutex,將會(huì)死鎖
}
catch
{
}
mutexSQLPool.ReleaseMutex();
}


/// <summary>
/// 清空SQL池
/// 清空前,返回SQL池中所有SQL語(yǔ)句,
/// </summary>
internal string[] Clear()
{
string[] array = new string[] { };

//此處必須與Push互斥
mutexSQLPool.WaitOne();
try
{
array = this.pool.ToArray(); //此處如果出錯(cuò),則不會(huì)執(zhí)行ReleaseMutex,將會(huì)死鎖
this.pool.Clear();
}
catch
{
}
mutexSQLPool.ReleaseMutex();

return array;
}
}
}

it知識(shí)庫(kù)【原創(chuàng)】c#實(shí)現(xiàn)用SQL池(多線程),定時(shí)批量執(zhí)行SQL語(yǔ)句,轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 天天爱综合 | 91精品国产一区二区三区 | 欧美色综合一区二区三区 | 国产福利一区二区 | 欧美成人精品一区二区三区 | 国产免费a视频 | 青青久在线视频 | 欧美区在线| 亚洲成人国产 | 国产黄色在线 | 中文字幕在线看人 | 久久久一二三 | 亚洲日韩第一页 | 国产成人综合亚洲欧美94在线 | 亚洲男人天堂 | 国产亚洲区 | 一级片网址 | 黄色综合 | 色噜噜狠狠色综合中国 | 亚洲国产在| 男女一区二区三区 | 99精品一区二区三区 | 亚洲 欧美 另类 综合 偷拍 | 99re6在线视频精品免费 | 亚洲一区精品在线 | 国产区视频在线观看 | 一区二区三 | 国产高清视频在线观看播放 | 男人av的天堂 | av在线播放免费 | 欧美一级免费 | 久久久精品一区二区三区四季av | 国产综合精品一区二区三区 | 成人影院av | 欧美jizzhd精品欧美巨大免费 | 国产精品视频久久久 | 日韩视频在线一区 | 中文av在线播放 | 爱爱视频在线观看 | 婷婷亚洲综合 | 亚洲精品一区二区在线 |