用ORACLE数据库、c#编写应用程序, 怎么做数据库缓冲池 ,各位指导指导我。 C#

用ORACLE数据库、c#编写应用程序, 怎么做数据库缓冲池 ,各位指导指导我。 C#,第1张

就是用C#与ORACAL做一个管理系统

,因为登陆到一个新界面以后,需要再次和数据库进行连接,以便输出数据库中一个表的内容。但没次做连接都很慢

,不知道用什么办法解决。

缓冲池由多个缓冲区组成。

而一个缓冲区由两部分组成:一部分是用来标识该缓冲器和用于管理的缓冲首部,另一部分是用于存放数据的缓冲体。这两部分有一一对应的映射关系。对缓冲池的管理是通过对每一个缓冲器的缓冲首部进行 *** 作实现的。

缓冲首部包括设备号、设备上的数据块号(块设备时)、互斥标识位以及缓冲队列连接指针和缓冲器号等。

系统把各缓冲区按其使用状况连成三种队列:

(1) 空白缓冲队列em,其队首指针为F(em),队尾指针为L(em);

(2) 装满输入数据的输入缓冲队列in,其队首指针为F(in),队尾指针为L(in);

(3) 装满输出数据的输出缓冲队列out,其队首指针为F(out),队尾指针为L(out)。

另外,在缓冲池中还具有四种工作缓冲区:

(1) 用于收容输入数据的工作缓冲区(hin);

(2) 用于提取输入数据的工作缓冲区(sin);

(3) 用于收容输出数据的工作缓冲区(hout);

(4) 用于提取输出数据的工作缓冲区(sout)。 可见,缓冲区工作在收容输入、提取输入、收容输出和提取输出四种工作方式如下:

对缓冲池的管理由如下几个 *** 作组成:

(1)从三种缓冲区队列中按一定的选取规则取出一个缓冲区的过程take_buf(type)

(2)把缓冲区按一定的选取规则插入相应的缓冲区队列的过程add_buf(type,number);

(3)供进程申请缓冲区用的过程get_buf(type,number)

(4)供进程将缓冲区放入相应缓冲区队列的过程put_buf(type,work_buf)。

其中,参数type表示缓冲队列类型,number为缓冲区号,而work_buf则表示工作缓冲区类型。 使用这几个 *** 作,缓冲池的工作过程可描述如下:

首先,输入进程调用get_uf(em,number)过程从空白缓冲区队列中取出一个缓冲号为number的空白缓冲区,将其作为收容输入缓冲区hin,当hin中装满了由输入设备输入的数据之后,系统调用过程put_buf(in,hin)将该缓冲区插入输入缓冲区队列in中。

另外,当进程需要输出数据数据时,输出进程经过缓冲管理程序调用过程get_buf(em,number)从空白缓冲区队列中取出一个空白缓冲区number作为收容输出缓冲区hout,待hout中装满输出数据之后,系统再调用过程Put_buf(out,hout)将该缓冲区插入输出缓冲区队列out.

对缓冲区的输入数据和输出数据的提取也是由过程get_buf和put_buf实现的。get_buf(out,number)从输出缓冲队列中取出装满输出数据的缓冲区number,将其作为sout。当sout中数据输出完毕时,系统调用过程put_buf(em,sout)将该缓冲区插入空白缓冲队列。而get_buf(in,number)则从输入缓冲队列中取出一个装满输入数据的缓冲区number作为输入缓冲区sin,当CPU从中提取完所需数据之后,系统调用过程put_buf(em,sin)将该缓冲区释放和插入空白缓冲队列em中。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10022408.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存