|
|
导航: |
论坛 -> DELPHI技术
斑竹:liumazi,sephil |
|
作者: |
|
2022/8/10 10:34:57 |
标题: |
求指教使用对象池创建TFDConnection地址错 |
浏览:2074 |
|
加入我的收藏 |
楼主: |
对象池是网上找的代码https://www.cnblogs.com/findumars/p/5624910.html 求大佬指导一下,别的对象都可以,这个TFDConnection就有问题,是它比较特殊么
----------------------------------------------
- |
作者: |
|
2022/8/10 10:37:51 |
1楼: |
调用如图
此帖子包含附件:
大小:111.8K |
----------------------------------------------
-
|
作者: |
|
2022/8/11 13:38:48 |
3楼: |
谢谢大哥,我知道自带的池子,我是想把链接跟query还有list那些用一个通用对象池来创建管理嘛,就找了这个对象池单元,好像不能创建TFDConection,我单独测试TFDConection(TComponent.create(nil))是可以的,不知道哪里有问题
----------------------------------------------
-
|
作者: |
|
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
|
作者: |
|
2022/8/11 14:52:09 |
5楼: |
不好意思,解决了,是我引用单元没有引用完整。。我只引用了FireDAC.Comp.Client单元,手动放置tfdconnection控件到界面之后,把uses引用全部拷到对象池单元即可,应该是引用单元缺少导致tfdconnection控件创建失败,谢谢大哥们
----------------------------------------------
-
|
作者: |
|
2022/8/14 11:43:56 |
6楼: |
请问下楼主,里面引用的这个单元 UntThreadTimer 在哪里能找到?谢谢啦!
----------------------------------------------
-
|
作者: |
|
2022/8/14 11:59:20 |
7楼: |
网上随便能搜到https://www.cnblogs.com/rogge7/p/6894254.html, 目前我弃用了,使用这个对象池创建database或者query之后使用,高并发时会报地址错,并发数1000下,大概2-3W请求会有一两个地址错,跟踪发现地址错是databse开启事务导致,我个人能力问题解决不了,建议使用的话做好压力测试没问题在使用
----------------------------------------------
-
|
作者: |
|
2022/8/14 12:51:41 |
8楼: |
你是怎么搞的1000并发测试的?
----------------------------------------------
z@S7
|
作者: |
|
2022/8/14 13:31:05 |
9楼: |
我在datasnap里使用连接池,5000并发没有AV。使用jemter测试
----------------------------------------------
-
|
作者: |
|
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/
|
作者: |
|
2022/8/14 16:38:34 |
11楼: |
感谢热心指点,那我就不用了。之前我用https://www.cnblogs.com/DKSoft/p/3564983.html 这个,soapui并发一万测试没错误,目前用在项目上,没有问题。可以试试。
----------------------------------------------
-
|
作者: |
|
2022/8/14 21:33:08 |
12楼: |
1000并发测试,如果不涉及大量数据通讯,用1000个线程就好吧
----------------------------------------------
SQL SERVER DBA QQ:315054403 曾经的Delphier 缘在上海
|
作者: |
|
2022/8/14 21:47:28 |
13楼: |
…… 被禁用帐号,帖子内容自动屏蔽! ……
----------------------------------------------
该账号是个傻逼
|
作者: |
|
2022/8/14 21:58:54 |
14楼: |
soapui的压测
此帖子包含附件:
大小:39.2K |
----------------------------------------------
-
|
作者: |
|
2022/8/14 22:19:54 |
15楼: |
…… 被禁用帐号,帖子内容自动屏蔽! ……
----------------------------------------------
该账号是个傻逼
|
作者: |
|
2022/8/15 10:32:39 |
16楼: |
用的jmeter压测,当然,说是1000并发,跟生产环境是有区别的,毕竟不是真正的1000个客户机在并发,然后连接池单元很多,firedac自带也有连接池,我本意是想搞一个对象池,所有的对象,db啊list啊那些全部放在一个地方,新加一种对象只需要添加定义DBPool: TObjPool<TFDConnection>;QryPool: TObjPool<TFDQuery>;类似即可,就目前这个对象池单元,我压测起来是有问题的,可能时我的用法有问题,这个单元应该没啥问题,慎用哈老哥们
----------------------------------------------
-
|
作者: |
|
2022/8/15 13:46:17 |
17楼: |
"1000个线程 是同時? 你有1000核CPU?" 不用惊讶。。很多场景下客户端就是发出请求,服务器端执行运算返回结果 客户端边的压力很小,所以产生1000个线程就符合多数那些场景
我是DBA,大量的这个场景,svr 1000+,线程1000+执行任务,客户端就是8cpu+16G ram
----------------------------------------------
SQL SERVER DBA QQ:315054403 曾经的Delphier 缘在上海
|
作者: |
|
2022/8/15 14:01:35 |
18楼: |
…… 被禁用帐号,帖子内容自动屏蔽! ……
----------------------------------------------
该账号是个傻逼
|
作者: |
|
2022/8/15 19:55:32 |
19楼: |
程序上只管创建线程,线程再连接到每个DB SVR执行任务,再将结果传回主线程 每个CPU挂200个线程也可以,由得它上下文切换,反正是等DB SVR的结果 这样的场景是合理的
至于压测,看负荷在哪里,如果负荷都在DB SVR端,也可以
----------------------------------------------
SQL SERVER DBA QQ:315054403 曾经的Delphier 缘在上海
|
作者: |
|
2022/8/15 20:25:28 |
20楼: |
…… 被禁用帐号,帖子内容自动屏蔽! ……
----------------------------------------------
该账号是个傻逼
|
作者: |
|
2022/8/15 22:55:26 |
21楼: |
经常跑1100+线程,当前没到1600个线程 线程越多,客户端性能会越差是可以理解的,个人场景不追求、不敏感这点性能差异
在32位上,可以跑到1500~1600个线程 在64位上,暂没发现限制 虽然上下文切换开销会越来越多
----------------------------------------------
SQL SERVER DBA QQ:315054403 曾经的Delphier 缘在上海
|
作者: |
|
2022/11/4 9:12:40 |
22楼: |
已经解决,确实是我的问题,对象池没问题,问题在于,query对象,在放回池的时候,要把Connection=nil,以前用的qry.free没注意这个点
----------------------------------------------
-
|
作者: |
|
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';
----------------------------------------------
-
|
|