一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

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

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

(一)SQL池

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

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

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

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

  特別提醒一下,SQL池是面向多線程的,所以必須對公共資源SQL采取鎖機制。這里采用互斥鎖,當業(yè)務邏輯層線程往SQL池中拋入SQL語句時,禁止SQL執(zhí)行線程執(zhí)行SQL語句,反之,當SQL執(zhí)行線程執(zhí)行SQL語句時,也不允許業(yè)務邏輯層線程往SQL池中拋入SQL語句。為什么要這么做?因為SQL執(zhí)行線程是批量執(zhí)行SQL語句,在批量執(zhí)行SQL語句前,會從池中取出所有SQL語句,如果此時業(yè)務邏輯層線程往SQL池中拋入SQL語句,則會導致這些SQL語句丟失,得不到執(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池數(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>
/// 增加一個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); //此處如果出錯,則不會執(zhí)行ReleaseMutex,將會死鎖
}
catch
{
}
mutexSQLPool.ReleaseMutex();
}


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

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

return array;
}
}
}

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

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

主站蜘蛛池模板: 一区二三国产 | 色视频www在线播放国产人成 | 巨大巨粗巨长的黑吊免费视频 | 天天色综 | 五月婷婷一区 | 女人被狂躁的免费视频网站软件 | www日本在线观看 | 精品免费久久久久久久 | 国内精自线一二三四2021小说 | 国产aaa免费视频国产 | 欧美视频福利 | 亚洲一区二区精品视频 | 精品伊人久久大线蕉地址 | 一区在线播放 | 欧美日韩一区二区三 | 精品一区二区三区无卡乱码 | 男人的天堂久久精品激情a 男人进去女人爽免费视频国产 | 欧美天堂色 | 欧美一区二区三区综合色视频 | 国产精品美女免费视频观看 | 国产精品视频免费播放 | a久久| 午夜国产精品视频 | 99xxoo视频在线永久免费观看 | 中文字幕在线观看国产 | 一本之道无吗一二三区 | 国产精品一区二区三区高清在线 | 久久精品大全 | 都市激情亚洲色图 | 高清免费久久影院 | 在线播影院理论片 | 激情五月综合网 | 中国美女牲交一级毛片 | 中文字幕综合久久久久 | 91久久精品都在这里 | 久久久国产精品福利免费 | 三级毛片网 | www.亚洲免费 | 国语精品视频在线观看不卡 | 四虎精品免费视频 | 日本美女久久 |