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. Python基础(5)_文件操作

    一.文件处理流程 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 二.文件打开模式 打开文件时,需要指定文件路径和以何等方式打开文件,打开后,即可获取该文件句柄,日后通过此文 ...

  2. shell分发文件脚本

    配置文件scp.conf ssh_hosts=("IP") #需要分发机器的所有IP ssh_ports=("22") ssh_users=("roo ...

  3. Spring - IoC(7): 延迟实例化

    默认情况下,Spring IoC 容器启动后,在初始化过程中,会以单例模式创建并配置所有使用 singleton 定义的 Bean 的实例.通常情况下,提前实例化 Bean 是可取的,因为这样在配置中 ...

  4. UITableView学习之辨析两个方法:⓵dequeueReusableCellWithIdentifier与⓶dequeueReusableCellWithIdentifier:forIndexPath:

    使用storyboard显示UITableView时,如果不修改系统默认生成的tableView:cellForRowAtIndexPath:方法中的代码,必须为UITableViewCell注册(填 ...

  5. ie8以上及非ie8情况下的写法

    <!-- [if gt ie 8]> <!--> <script src="no-ie8.js"></script>  <!- ...

  6. 一张图介绍 html中offset、client、scroll、offset 、padding、margin 各种属性介绍

  7. [转]在树莓派上搭建LAMP服务

    之前介绍过树莓派上LNMP环境的搭建方法,本文将详细介绍如何在树莓派上配置LAMP服务. 为LAMP,是最流行的服务器配置之一,LAMP的含义是: Linux - 操作系统 Apache - 网络服务 ...

  8. swift关于is和as的解释

    http://tieba.baidu.com/p/3155277323 在Swift中,类型检查使用is和as操作符来实现. is操作符用来检查一个实例是否是某种特定类型,如果是返回true,否则返回 ...

  9. twitter api的使用获取关注者的时间线

    # -*- coding: utf-8 -*- from tweepy import OAuthHandler import datetime import pandas as pd import t ...

  10. Android开发工具--AndroidStudio

    1.Android studio更改快捷键File->setttings  搜索key map就可以更改成自己喜欢的会计键风格了