OTL翻譯 10 OTL的流緩衝池

2022-05-05 09:36:09 字數 1100 閱讀 5964

otl的流緩衝池

一般來講,流一般作為乙個區域性的變數被使用,當使用完畢後就立刻關閉,如果需要再次使用就需要再次的宣告變數,如此迴圈。otl流的緩衝池(記憶體池)是乙個解決以往的流效能低下的乙個機制。當流被關閉後,實際上流的相關變數被儲存在乙個流緩衝池裡面,以便再利用。

每乙個流在解析sql或與資料庫層打交道的時候都存在著巨大的資源開銷。otl通過流緩衝池機制來解決這個不必要的開銷以提高效能。

當乙個流「關閉」後,實際上,它被儲存在乙個流緩衝池裡面。如果後面再需要乙個類似的流,那麼就只需要把流緩衝池裡面的流取出來賦給相應的流變數即可再使用。不管該變數是區域性還是全域性的變數。相似的地方在於流的緩衝區大小與流相關的sql語句是相同的。它們被儲存在流緩衝池裡面。

比如說有三個已經被關閉了的相似(緩衝區大小與sql語句型別相同)的流已經被分配了記憶體資源。但實際上,在流的緩衝池裡面只有乙個入口,也就是說只有這三個流的乙個副本。如果後面再需要相似的流,那麼就會從中把取出該副本賦給對應的變數使用。如果有乙個迴圈裡面要不停的使用這個相同的流的話,那實際上流的主體總是這個相同的流。它被從流緩衝池裡面取出來後賦給相應的變數再續使用。

在某些時候,某個流可能就真的只使用一次就關閉,這個時候otl_stream::close()有乙個對應的擴充套件函式提供給開發者強制關閉流而不放在流緩衝池裡面。

如果在某些情況下的確不想使用流緩衝池技術,我們還可以通過巨集來關閉流緩衝池。這個需要在編譯的時候確定下來。

通過上面的介紹,很明顯,流緩衝池是乙個otl_connect物件,同樣,它還有乙個最大容量限制,我們可以通過otl_connect::set_stream_pool_size()函式進行設定。

因為流緩衝池使用了map和vector,所以在使用流緩衝池的時候,必須要定義otl_stl(或otl_ace)巨集。

當乙個新的流被要求加入到流緩衝池中,但是流緩衝池已滿了,這個時候,用的最少的那個流將被從流緩衝池中清除,而把最新的這個流放進來。

從sergei kuchin統計的資訊來看,流緩衝池還是相對有乙個些開銷的,這個主要原因是因為stl裡面的map容器的開銷導致。

下面為流緩衝池的乙個簡單圖例:

OTL翻譯 1 說明

說明 該文件說明的是4.0版本的oracle odbc和db2 cli模板庫 otl otl4.0 後面簡稱otl 模板庫是基於c 的模板的。otl4.0是組合了c 的模板框架和otl介面卡。框架是乙個簡單的otl stream的概念,otl介面卡則是乙個基於資料庫api的經量級的類庫,並且作為引數...

使用OTL呼叫Oracle的儲存函式

otl介紹 otl 是 oracle,odbc and db2 cli template library 的縮寫,是乙個c 操控關聯式資料庫的模板庫,最新版本4.0.104,參見 優點 a.跨平台 b.執行效率高,與c語言直接呼叫api相當 c.開發效率高,起碼比ado.net使用起來更簡單,更簡潔...

開啟otl的64位長整數支援

要開啟otl的64位長整數支援,必須先定義巨集 1 define otl bigint int64 vc borland c 或者1 define otl bigint long long gnu c 同時,因為otl只是乙個標頭檔案,具體的64位長整數支援還得靠底層,對於底層驅動本身就支援64位長...