1.建立FDManager的ConnectionDef。并设置此Pooling为True.

2.建立Thread类进行多个FDConnection连接DB。

3.本列是oracle远程数据.如下图:

Open pooling是建立FDManger中的Connection. Thread按钮是建立连接的测试。右边的空白是显示连接时间(为Ticks)

时间单位换算:

1秒=1000毫秒
1毫秒=1000微秒
1微秒=1000纳秒
1纳秒=1000皮秒
1皮秒=1000飞秒
在C#中,1Ticks = 100纳秒
 
以下为代码:

unit Unit1;

interface

uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, FireDAC.Stan.Intf, FireDAC.Stan.Option,
FireDAC.Stan.Error, FireDAC.UI.Intf, FireDAC.Phys.Intf, FireDAC.Stan.Def,
FireDAC.Phys, Vcl.Buttons, FireDAC.Comp.Client, FireDAC.Stan.Pool,
FireDAC.Stan.Async, FireDAC.VCLUI.Wait, Data.DB, Vcl.StdCtrls,
FireDAC.Moni.Base, FireDAC.Moni.RemoteClient,FireDAC.DApt,
FireDAC.Phys.OracleDef, FireDAC.Phys.Oracle,System.Diagnostics; type TForm1 = class(TForm)
FDManager1: TFDManager;
SpeedButton1: TSpeedButton;
FDConnection1: TFDConnection;
BitBtn1: TBitBtn;
Memo1: TMemo;
FDMoniRemoteClientLink1: TFDMoniRemoteClientLink;
FDPhysOracleDriverLink1: TFDPhysOracleDriverLink;
procedure BitBtn1Click(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; TDBThread=class(TThread)
private
FForm:TForm1;
FConn:TFDConnection;
FQry :TFDQuery;
procedure exePrc;
public
procedure Execute;override;
constructor Create(AForm:TForm1);
destructor Destroy;override;
end;
var
Form1: TForm1; implementation {$R *.dfm} procedure TForm1.BitBtn1Click(Sender: TObject);
var
i:integer;
ATrhed:TDBThread;
AStopWatch:TStopwatch;
j:Int64; begin
for i := to do //如果产生的Connection大于连接池的数量则会报错提示
begin
ATrhed:= TDBThread.Create(self);
end;
FDConnection1.ConnectionDefName :='oracle' ;
FDConnection1.LoginPrompt := false; //以下为不用连接池,时间就比较长
AStopWatch := TStopwatch.StartNew;
FDConnection1.Connected := true;
AStopWatch.Stop;
i:=AStopWatch.ElapsedTicks;
self.Memo1.Lines.Add('not pooling: '+j.ToString()+' Ticks'); end; procedure TForm1.SpeedButton1Click(Sender: TObject);
var
conn: IFDStanConnectionDef;
begin
FDManager1.Close;
conn:= self.FDManager1.ConnectionDefs.AddConnectionDef;
conn.Name :='ora_test';
conn.Params.DriverID :='Ora';
conn.Params.UserName :='admin';
conn.Params.Password :='pwd';
conn.Params.Database := 'testdb';
conn.Params.Pooled := True; //启用pool
conn.Params.PoolMaximumItems := ; //10.2.3中默认的最大池为50.一般够用
conn.Apply;//此方法可以不用
FDManager1.Open;//产生池
end; { TDBThread } constructor TDBThread.Create(AForm: TForm1);
begin
FreeOnTerminate := True;
FForm := AForm;
FConn := TFDConnection.Create(nil);
FQry := TFDQuery.Create(nil);
FQry.Connection := FConn;
FConn.ConnectionDefName := AForm.FDManager1.ConnectionDefs.ConnectionDefByName('ora_test').Name;//自动调用池,相当于FDmanager.AcquireConnection方法。最好按此列调用
inherited Create(false);; end; destructor TDBThread.Destroy;
begin
FConn.Free;
FQry.Free;
inherited;
end; procedure TDBThread.Execute;
begin
FQry.Close;
FQry.Open('select sysdate from dual');
Synchronize(exePrc);
end; procedure TDBThread.exePrc;
var
AStopWatch:TStopwatch;
i:Int64;
begin
AStopWatch := TStopwatch.StartNew;
FConn.Connected := True;
AStopWatch.Stop;
i:=AStopWatch.ElapsedTicks;
FForm.Memo1.Lines.Add('pooling: '+i.ToString()+' Ticks');
end; end.

运行结果:

 

FireDac Pooling的更多相关文章

  1. FIREDAC FDConnection 连接池 连接串

    一.FDConnection 连接池 http://docs.embarcadero.com/products/rad_studio/firedac/frames.html?frmname=topic ...

  2. 如何理解 卷积 和pooling

    转自:http://blog.csdn.net/malefactor/article/details/51078135 CNN是目前自然语言处理中和RNN并驾齐驱的两种最常见的深度学习模型.图1展示了 ...

  3. FireDAC 连接SQL Server一些要注意的地方

    TFDConnection: FetchOptions.Mode 设置为fmAll, 返回全部结果, 否则默认只返回前50条, 效果与open以后再执行FetchAll一样 Specifies how ...

  4. win2008使用FireDac连接ORACLE数据库问题

    2008上装DELPHI XE7,无论用FireDac 还是Ado都连不上ORACLE数据库 --------------------------- Debugger Exception Notifi ...

  5. FireDAC 连接access MDB数据库的方法

    Use Cases Open the Microsoft Access database. DriverID=MSAcc Database=c:\mydata.mdb Open the Microso ...

  6. 谈谈pooling?

    使用pooling的目的之一是获取一定的特征不变性,目前用的比较多的是Max..,非线性对于Deep的重要性不用多说,pooling是主要贡献之一,当然少不了relu类的激活函数.pooling还有一 ...

  7. TensorFlow中max pooling层各参数的意义

    官方教程中没有解释pooling层各参数的意义,找了很久终于找到,在tensorflow/python/ops/gen_nn_ops.py中有写: def _max_pool(input, ksize ...

  8. FireDac 的RecordCount 相关测试 记录。

    unit Unit4; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System ...

  9. pooling的原理与Python实现

    本文首先阐述pooling所对应的操作,然后分析pooling背后蕴含的一些道理,最后给出pooling的Python实现. 一.pooling所对应的操作 首先从整体上对pooling有一个直观的概 ...

随机推荐

  1. vue2.0基础知识,及webpack中vue的使用

    ## 基础指令 ## [v-cloak]{         Display:none;     }     <p v-cloak>xx{{msg}}xx</p> //解决闪烁问 ...

  2. java.lang.NumberFormatException: For input string: "26.0"

    数据类型转化的时候的错误: 程序中要转的字符串不是一个数字,所以在format成数字的时候就出错了.    字符串不符合数字预定格式.

  3. js如何弹出新窗口

    js如何弹出新窗口 时间:2012-4-22 弹出新窗口也是在网页设计中会经常用到的,其用法也很简单,是通过调用javascript的内置函数windows.open来产生的.  window.ope ...

  4. hashlib模块加密用法

    hashlib 加密模块 hashlib.md5() 构建一个md5的对象,用于调用对象的update方法去加密   例子: import hashlib hash = hashlib.md5() h ...

  5. 干货:MySQL数据库优化参考

    本文整理了一些MySQL的通用优化方法,做个简单的总结分享,旨在帮助那些没有专职MySQL DBA的企业做好基本的优化工作,至于具体的SQL优化,大部分通过加适当的索引即可达到效果,更复杂的就需要具体 ...

  6. python 学习笔记 aiohttp

    asyncio可以实现单进程并发IO操作,如果仅用在客户端,发挥的威力并不大,如果把asyncio用在服务器端,由于http链接就是IO操作, 因此可以用单线程+coroutine实现多客户的高并发支 ...

  7. 取Session数据语句在应放在哪里

    UsersModel loginUser = (UsersModel)Session["usersModel"]; 直接放在 public partial class PagesF ...

  8. Bean装配之@Autowired注解

    @Required(不常用) @Autowired(常用) 下面用例子解释以上内容: @Autowired注解的三种方式如下,第一种是直接在属性名上加注解,这样就可以不用在写set方法进行注入,这种方 ...

  9. java 定时器的三种方式

    原地址:http://blog.csdn.net/haorengoodman/article/details/23281343/ /** * 普通thread * 这是最常见的,创建一个thread, ...

  10. win32 listctrl控件右键菜单的实现

    HMENU Menu_list,Menu_all; POINT point; HINSTANCE hInstance;//下面代码放到BOOL WINAPI DialogProc下 case WM_C ...