物件池及資料庫連線物件池

2021-04-15 17:13:54 字數 2917 閱讀 7476

objectpool類:

////

物件池//

using

system;

using

system.collections.generic;

using

system.text;

using

system.timers;

using

system.collections;

namespace

objectpool

//////

建立乙個新的物件

///

///物件例項

protected

abstract

t create();

//////

檢查特定物件有效性

///

///物件例項

///是否有效 true or false

protected

abstract

bool

validate(t t);

//////

刪除物件

///

///物件例項

protected

abstract

void

expire(t t);

//////

建構函式

///

internal

objectpool()}}

catch

(exception)}};

}///

///從池中獲取物件

///

///物件例項

internal

t getobjectfrompool()

else}}

catch

(exception)

//新建立物件t =

create();

//設定為正在使用物件

objlocked.add(t, longnow);

}returnt;}

//////

將物件放入池中

///

///物件例項

internal

void

returnobjecttopool(t t)}}

}}dbconn類:

using

system;

using

system.collections.generic;

using

system.text;

using

system.data;

using

system.data.sqlclient;

namespace

objectpool

//////

返回自身物件(singleton)

///

public

static

readonly

dbconn instance 

=new

dbconn();

//////

預設連線語句

///

private

static

string

strconnstr =@"

data source=work0249;initial catalog=adventureworks;persist security info=true;user id=sa;password=sa";

//////

連線語句(屬性)

///

public

string

strconnstr

set}

//////

建立資料庫連線物件

///

///已開啟的資料庫連線物件

protected

override

sqlconnection create()

//////

驗證連線狀態

///

///資料庫連線物件

///連線狀態open : true   close:false

protected

override

bool

validate(sqlconnection t)

catch

(sqlexception)

}///

///關閉資料庫連線

///

///資料庫連線物件

protected

override

void

expire(sqlconnection t)

catch

(sqlexception)

}///

///從池中獲取資料庫連線

///

///資料庫連線物件

public

sqlconnection borrowdbconn()

catch

(exception ex)

}///

///將連線物件放入池中

///

///資料庫連線物件

public

void

returndbconn(sqlconnection conn)}}

使用示例:

using

system;

using

system.collections.generic;

using

system.text;

using

system.data.sqlclient;

namespace

objectpool

//將物件放入池中

dbconn.returndbconn(conn);

console.read();}}

}

DataSnap資料庫連線池,資料集物件池的應用

傳統的應用伺服器的開發往往是在servermethods單元中拖放一堆tdataset,tdatasetprovider控制項,這是乙個最簡單粗暴的開發方向,往往會造成服務端程式檔案的臃腫 服務執行期間記憶體資源消耗過大的問題。因此這種往應用伺服器中拖放一堆tdataset,tdatasetprov...

執行緒池 資料庫連線池

執行緒池的原理 來看一下執行緒池究竟是怎麼一回事?其實執行緒池的原理很簡單,類似於作業系統中的緩衝區的概念,它的流程如下 先啟動若干數量的執行緒,並讓這些執行緒都處於睡 眠狀態,當客戶端有乙個新請求時,就會喚醒執行緒池中的某乙個睡眠執行緒,讓它來處理客戶端的這個請求,當處理完這個請求後,執行緒又處於...

執行緒池 資料庫連線池

執行緒池原理 先啟動若干數量的執行緒,並讓這些執行緒都處於睡眠狀態,當客戶端有乙個新請求時,就會喚醒執行緒池中的某乙個睡眠執行緒,讓它來處理客戶端的這個請求,當處理完這個請求後,執行緒又處於睡眠狀態。資料庫連線池原理 資料庫連線池的解決方案是在應用程式啟動時建立足夠的資料庫連線,並講這些連線組成乙個...