|
|
导航: |
论坛 -> DELPHI技术
斑竹:liumazi,sephil |
|
作者: |
|
2022/5/9 22:29:28 |
标题: |
|
加入我的收藏 |
楼主: |
…… 被禁用帐号,帖子内容自动屏蔽! ……
----------------------------------------------
该账号是个傻逼 |
作者: |
|
2022/5/10 13:44:48 |
1楼: |
用 Delphi,自己写一个自动化管理对象生命周期的框架,包括了对象缓冲池功能,避免了频繁创建和释放带来的 CPU 消耗,200行代码都不用。
关键是利用 Delphi 的 interface 的接口引用计数功能。我在04年时就做了一个,运行良好,从来不用关注释放问题,而且效率也非常高。
----------------------------------------------
-
|
作者: |
|
2022/5/10 13:46:18 |
2楼: |
听上去特别好啊,能分享一下吗@pcplayer
----------------------------------------------
-
|
作者: |
|
2022/5/10 13:49:51 |
3楼: |
…… 被禁用帐号,帖子内容自动屏蔽! ……
----------------------------------------------
该账号是个傻逼
|
作者: |
|
2022/5/10 16:19:42 |
4楼: |
…… 被禁用帐号,帖子内容自动屏蔽! ……
----------------------------------------------
该账号是个傻逼
|
作者: |
|
2022/5/10 20:17:46 |
5楼: |
这种如果开发高并发,是必须要认真考虑的问题
----------------------------------------------
-
|
作者: |
|
2022/5/11 10:37:02 |
6楼: |
仅仅是考虑内存的分噢诶和释放的话,实际上Delphi内存的管理器已经做了,你释放的内存并没有被还给操作系统,下次分配内存块的时候会被复用。你设计的池也就仅仅能减少对象的构造/析构花费的时间。 另外你容器里面的对象并不好判断什么时候该回收,重用的时候怎么复原。 Java等语言有对象的跟踪机制,垃圾回收器有好几种做法,可以知道对象是否是真正的废弃了。而Delphi的对象并不支持这个。 想要自动回收还是Interface的引用计数比较实用快捷。唯一的问题就是不能循环引用。苹果的Objective-C也是引用计数机制的,解决循环引用的方法是提供弱引用。 Delphi高版本有提供了一种Managed Record的,生存期自管理的record。 如果再能提供以下操作符“.”的重载,指向内部以的对象,就可以方便的实现智能指针,可以用Managed Record套在对象上实现生存期自管理,还能用"."来转向对象的属性和方法。只可惜Delphi做什么都是支持,但不彻底
----------------------------------------------
武稀松http://www.raysoftware.cn
|
作者: |
|
2022/5/11 11:07:00 |
7楼: |
…… 被禁用帐号,帖子内容自动屏蔽! ……
----------------------------------------------
该账号是个傻逼
|
作者: |
|
2022/5/11 12:12:32 |
7楼: |
我的作法就是利用 Delphi 的接口引用计数。我修改了接口类的那个引用计数为零自动释放的代码,改为引用计数为零回到那个类的类工厂里面的对象缓冲池。
这样做的目的,其实就是:
1. 避免哪里没有释放导致的内存泄漏。实际上当时做这个,就是因为一个同事做到东西,存在内存泄漏。当时那个程序每秒会需要几十个上百个新的对象,用完了需要释放掉。总有地方没处理好,导致眼睛看得见的内存持续上升。懒得到处检查代码,就做了一个这样的东西。
2. 对象既然缓冲了,就不用每秒有几十个上百个对象的创建和释放,CPU 占用立马就降下来了。
源代码我记得好像在网上发布过。忘记发在哪里了。
----------------------------------------------
-
|
|