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翻译(10) -- OTL的流缓冲池的更多相关文章

  1. OTL翻译(2) -- OTL流的概念

    OTL流的概念 任何的SQL语句.SQL语句块或存储过程,都是通过输入与输出变量进行处理参数与结果的. 如: 例1:一个SELECT语句把标量的输入变量作为WHERE子句部分的条件:同时SELECT部 ...

  2. otl翻译(11) -- OTL的迭代器

    OTL stream read iterator 这个类是一个像传统的JDBC中的getter()操作一样扩展了OTL流的模板类.它现在还不支持UNICODE字符集.它对otl_refcur_stre ...

  3. OTL翻译(3) -- OTL的主要类

    相比于传统的C++类库而言,OTL更像是一个代码容器,里面复杂,但对外的接口简单.OTL在处理程序方面受到了STL的影响. OTL有一个模板框架,它实现了otl_stream的概念.该框架由模板类和内 ...

  4. OTL翻译(5) -- otl_stream流相关绑定变量

    声明绑定变量 本章节将详细的说明如何在otl_stream流里面声明绑定变量. SQL语句.SQL语句块或存储过程在程序里面使用的时候总是带有占位符.OTL里面带有一个小的解析器用来解析这些占位符,并 ...

  5. OTL翻译(4) -- otl_stream类

    otl_stream Otl_stream是具体实现otl_stream_concept的类.任何的SQL语句.SQL语句块和存储过程都能通过otl_stream进行处理. 传统的数据库API处理SQ ...

  6. 基于.NetCore开发博客项目 StarBlog - (10) 图片瀑布流

    系列文章 基于.NetCore开发博客项目 StarBlog - (1) 为什么需要自己写一个博客? 基于.NetCore开发博客项目 StarBlog - (2) 环境准备和创建项目 基于.NetC ...

  7. OTL翻译(6) -- otl_connect类

    otl_connect 这个类封装了连接的功能,如连接.断开连接.提交.回滚等.otl_connect也就是一个用来创建连接对象并进行管理的类. 序号 方法.变量 说明 1 int connected ...

  8. OTL翻译(8) -- otl_long_string/otl_long_unicode_string类

    otl_long_string/olt_long_unicode_string 这两个类主要用来处理大对象数据.从OTL4.0版本开始,otl_long_string还可以处理任何类型的RAW/BIA ...

  9. OTL翻译(1) -- 说明

    说明 该文档说明的是4.0版本的ORACLE/ODBC和DB2-CLI模板库(OTL).OTL4.0(后面简称OTL)模板库是基于C++的模板的. OTL4.0是组合了C++的模板框架和OTL适配器. ...

随机推荐

  1. jQuery 的运行机制(How jQuery Works)

    原文地址:http://learn.jquery.com/about-jquery/how-jquery-works/ linkjQuery: 基础知识 这是一个基本的教程,旨在帮助您开始使用jQue ...

  2. mysql 触发器(Trigger)简明总结和使用实例

    一,什么触发器 1,个人理解触发器,从字面来理解,一触即发的一个器,简称触发器(哈哈,个人理解),举个例子吧,好比天黑了,你开灯了,你看到东西了.你放炮仗,点燃了,一会就炸了.2,官方定义触发器(tr ...

  3. JXOI2017-2018 解题报告

    链接:JXOI2017-2018 解题报告 代码预览:Github

  4. Swift2.0语言教程之下标脚本

    Swift2.0语言教程之下标脚本 下标脚本 下标脚本是访问对象.集合或者序列的快速方式.开发者不需要调用实例特定的赋值和访问方法,就可以直接访问所需要的数值.例如在数组中,可以直接使用下标去访问或者 ...

  5. [ 转载 ] Java基础14--创建线程的两个方法

    http://www.cnblogs.com/whgw/archive/2011/10/03/2198506.html Java提供了线程类Thread来创建多线程的程序.其实,创建线程与创建普通的类 ...

  6. [ 转载 ] Java中常用的设计模式

    Java中常用的设计模式 1.单例模式 单例模式有以下特点: 1.单例类只能有一个实例. 2.单例类必须自己创建自己的唯一实例. 3.单例类必须给所有其他对象提供这一实例. 单例模式确保某个类只有一个 ...

  7. ARM ® and Thumb ®-2 指令系统

    指令表关键词        Rm {, <opsh>} 寄存器移位方式,将寄存器的移位结果作为操作数而Rm值保持不变       <Operand2> 灵活的使用第二个操作数. ...

  8. ICD2 VPP limiter for new PIC microcontrollers.

    http://www.circuitsathome.com/mcu/pic_vpp_limiter VOUT = 2.5V * ( 1 + 24/10 ) = 2.5 * 3.4 = 8.5V New ...

  9. java开发C语言编译器

    http://study.163.com/course/introduction.htm?courseId=1003169025 http://study.163.com/course/courseM ...

  10. shader 4 杂 一些和函数名词、数据结构

    Normal:  法线 Normao mapping: 法线贴图 Lighting mapping: 光照贴图 Bump mapping:     凹凸贴图:模拟粗糙外表面的技术. FX-Water ...