DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: pixelcraft
今日帖子: 53
在线用户: 18
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 yangyachao (常安宁) ▲▲△△△ -
普通会员
2022/8/10 10:34:57
标题:
求指教使用对象池创建TFDConnection地址错 浏览:2074
加入我的收藏
楼主: 对象池是网上找的代码https://www.cnblogs.com/findumars/p/5624910.html
求大佬指导一下,别的对象都可以,这个TFDConnection就有问题,是它比较特殊么
----------------------------------------------
-
作者:
男 yangyachao (常安宁) ▲▲△△△ -
普通会员
2022/8/10 10:37:51
1楼: 调用如图
此帖子包含附件:
PNG 图像
大小:111.8K
----------------------------------------------
-
作者:
男 homejun (homejun) ★☆☆☆☆ -
盒子活跃会员
2022/8/10 20:17:28
2楼: firedac本身就支持pool链接,那文章有点旧了。https://www.cnblogs.com/jankerxp/p/10621851.htmlhttps://www.cnblogs.com/yagzh2000/p/9183110.html
----------------------------------------------
-delphi新资讯站 http://www.delphigear.cn
作者:
男 yangyachao (常安宁) ▲▲△△△ -
普通会员
2022/8/11 13:38:48
3楼: 谢谢大哥,我知道自带的池子,我是想把链接跟query还有list那些用一个通用对象池来创建管理嘛,就找了这个对象池单元,好像不能创建TFDConection,我单独测试TFDConection(TComponent.create(nil))是可以的,不知道哪里有问题
----------------------------------------------
-
作者:
男 zhyhero (zhyhero) ★☆☆☆☆ -
盒子活跃会员
2022/8/11 14:26:37
4楼: 可能跟FDManager有冲突吧。
{----------}
{ TFDCustomConnection          }
{----------}
constructor TFDCustomConnection.Create(AOwner: TComponent);
var
  oOpts: IFDStanOptions;
begin
  inherited Create(AOwner);
  SetOptionsIntf(nil);
  FDCreateInterface(IFDStanConnectionDef, FParams);
  FParams.OnChanging := ParamsChanging;
  FTxOptions := TFDTxOptions.Create;
  FCommands := TFDObjList.Create;
  LoginPrompt := True;
  oOpts := Self as IFDStanOptions;
  FOptionsIntf := oOpts;
  FLastUsed := Now;
  FConnectedStoredUsage := [auDesignTime, auRunTime];
  FDeferredUnregs := TFDObjList.Create;
  FDManager.AddConnection(Self);
end;
----------------------------------------------
z@S7
作者:
男 yangyachao (常安宁) ▲▲△△△ -
普通会员
2022/8/11 14:52:09
5楼: 不好意思,解决了,是我引用单元没有引用完整。。我只引用了FireDAC.Comp.Client单元,手动放置tfdconnection控件到界面之后,把uses引用全部拷到对象池单元即可,应该是引用单元缺少导致tfdconnection控件创建失败,谢谢大哥们
----------------------------------------------
-
作者:
男 zhahongyi (如风) ★☆☆☆☆ -
普通会员
2022/8/14 11:43:56
6楼: 请问下楼主,里面引用的这个单元 UntThreadTimer 在哪里能找到?谢谢啦!
----------------------------------------------
-
作者:
男 yangyachao (常安宁) ▲▲△△△ -
普通会员
2022/8/14 11:59:20
7楼: 网上随便能搜到https://www.cnblogs.com/rogge7/p/6894254.html,
目前我弃用了,使用这个对象池创建database或者query之后使用,高并发时会报地址错,并发数1000下,大概2-3W请求会有一两个地址错,跟踪发现地址错是databse开启事务导致,我个人能力问题解决不了,建议使用的话做好压力测试没问题在使用
----------------------------------------------
-
作者:
男 zhyhero (zhyhero) ★☆☆☆☆ -
盒子活跃会员
2022/8/14 12:51:41
8楼: 你是怎么搞的1000并发测试的?
----------------------------------------------
z@S7
作者:
男 sxqwhxq (步惊云) ★☆☆☆☆ -
普通会员
2022/8/14 13:31:05
9楼: 我在datasnap里使用连接池,5000并发没有AV。使用jemter测试
----------------------------------------------
-
作者:
男 keymark (嬲) ▲▲▲△△ -
普通会员
2022/8/14 14:15:11
10楼: av是说的  初始化的内存释放后再次访问那个av吗?
----------------------------------------------
[alias]  co = clone --recurse-submodules  up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/>http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
作者:
男 zhahongyi (如风) ★☆☆☆☆ -
普通会员
2022/8/14 16:38:34
11楼: 感谢热心指点,那我就不用了。之前我用https://www.cnblogs.com/DKSoft/p/3564983.html 这个,soapui并发一万测试没错误,目前用在项目上,没有问题。可以试试。
----------------------------------------------
-
作者:
男 luckyrandom (luckyrandom) ★☆☆☆☆ -
普通会员
2022/8/14 21:33:08
12楼: 1000并发测试,如果不涉及大量数据通讯,用1000个线程就好吧
----------------------------------------------
SQL SERVER DBA QQ:315054403 曾经的Delphier  缘在上海
作者:
男 lordaeron (Terry) ★☆☆☆☆ -
禁用账号
2022/8/14 21:47:28
13楼: ……
被禁用帐号,帖子内容自动屏蔽!
……

----------------------------------------------
该账号是个傻逼
作者:
男 zhahongyi (如风) ★☆☆☆☆ -
普通会员
2022/8/14 21:58:54
14楼: soapui的压测
此帖子包含附件:
PNG 图像
大小:39.2K
----------------------------------------------
-
作者:
男 lordaeron (Terry) ★☆☆☆☆ -
禁用账号
2022/8/14 22:19:54
15楼: ……
被禁用帐号,帖子内容自动屏蔽!
……

----------------------------------------------
该账号是个傻逼
作者:
男 yangyachao (常安宁) ▲▲△△△ -
普通会员
2022/8/15 10:32:39
16楼: 用的jmeter压测,当然,说是1000并发,跟生产环境是有区别的,毕竟不是真正的1000个客户机在并发,然后连接池单元很多,firedac自带也有连接池,我本意是想搞一个对象池,所有的对象,db啊list啊那些全部放在一个地方,新加一种对象只需要添加定义DBPool: TObjPool<TFDConnection>;QryPool: TObjPool<TFDQuery>;类似即可,就目前这个对象池单元,我压测起来是有问题的,可能时我的用法有问题,这个单元应该没啥问题,慎用哈老哥们
----------------------------------------------
-
作者:
男 luckyrandom (luckyrandom) ★☆☆☆☆ -
普通会员
2022/8/15 13:46:17
17楼: "1000个线程 是同時? 你有1000核CPU?"
不用惊讶。。很多场景下客户端就是发出请求,服务器端执行运算返回结果
客户端边的压力很小,所以产生1000个线程就符合多数那些场景

我是DBA,大量的这个场景,svr 1000+,线程1000+执行任务,客户端就是8cpu+16G ram
----------------------------------------------
SQL SERVER DBA QQ:315054403 曾经的Delphier  缘在上海
作者:
男 lordaeron (Terry) ★☆☆☆☆ -
禁用账号
2022/8/15 14:01:35
18楼: ……
被禁用帐号,帖子内容自动屏蔽!
……

----------------------------------------------
该账号是个傻逼
作者:
男 luckyrandom (luckyrandom) ★☆☆☆☆ -
普通会员
2022/8/15 19:55:32
19楼: 程序上只管创建线程,线程再连接到每个DB SVR执行任务,再将结果传回主线程
每个CPU挂200个线程也可以,由得它上下文切换,反正是等DB SVR的结果
这样的场景是合理的

至于压测,看负荷在哪里,如果负荷都在DB SVR端,也可以
----------------------------------------------
SQL SERVER DBA QQ:315054403 曾经的Delphier  缘在上海
作者:
男 lordaeron (Terry) ★☆☆☆☆ -
禁用账号
2022/8/15 20:25:28
20楼: ……
被禁用帐号,帖子内容自动屏蔽!
……

----------------------------------------------
该账号是个傻逼
作者:
男 luckyrandom (luckyrandom) ★☆☆☆☆ -
普通会员
2022/8/15 22:55:26
21楼: 经常跑1100+线程,当前没到1600个线程
线程越多,客户端性能会越差是可以理解的,个人场景不追求、不敏感这点性能差异

在32位上,可以跑到1500~1600个线程
在64位上,暂没发现限制
虽然上下文切换开销会越来越多
----------------------------------------------
SQL SERVER DBA QQ:315054403 曾经的Delphier  缘在上海
作者:
男 yangyachao (常安宁) ▲▲△△△ -
普通会员
2022/11/4 9:12:40
22楼: 已经解决,确实是我的问题,对象池没问题,问题在于,query对象,在放回池的时候,要把Connection=nil,以前用的qry.free没注意这个点
----------------------------------------------
-
作者:
男 wiseinfo (wisienfo) ★☆☆☆☆ -
普通会员
2022/11/8 16:47:08
23楼:   with FDManager.ConnectionDefs.AddConnectionDef do
  begin
    Name := 'MSSQLPool';
    Params.Values['DriverID'] := 'MSSQL';
    Params.Values['Server'] := '(Local)';
    Params.Values['Database'] := 'Master';
    Params.Values['OSAuthent'] := 'Yes';
    Params.Values['User_Name'] := '';
    Params.Values['Password'] := '';
    // Params.MonitorBy := mbRemote;
    Params.PoolMaximumItems := 24; // 系统默认50
    Params.PoolExpireTimeout := 5000;
    Params.PoolCleanupTimeout := 5000;
    Params.Pooled := True; // 这个是关键
  end;
  FDConnection.ConnectionDefName := 'MSSQLPool';
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行93.75毫秒 RSS