精华帖 (0) :: 良好帖 (2) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-01-13
qianhd 写道 jorneyR 写道 qianhd 写道 有数据证明吗?
从原理上看 这完全是无稽之谈 从我测试的数据来看 更加是无稽之谈 为了让差距更加明显 我将初始尺寸改成1400*600 线条长度小于0.05 总共1048577个点 我加了一个线程 会定时修改frame的size 然后在paintComponent开始时记录时间,结束时候打印执行时间 所谓的3缓冲完全绘图一次 耗时1.5-1.8秒(这也时间太长了,我这里是毫秒级的) 默认双缓冲完全绘图一次 耗时1.5-1.8秒 没看出来所谓的3缓冲有任何的性能提升 呵呵,就算我在扯蛋吧,没什么好争论的. 有时间可以去看看Swing方面的书,如Filthy Rich Client等之类的 装啥B啊 不就本30多块的书嘛 只可惜你看了也白看 你大部分的回帖都对人充满歧视,能不能守一点职业道德? |
|
返回顶楼 | |
发表时间:2011-01-13
我使用过与楼主类似的三缓冲技术,首先我确认的确可以提高界面刷新的速度,但这个技术也存在一个问题:如果界面不断变大,内存里的image就会跟着变大,导致内存占用不断上升,而swing的双缓冲机制就不会有这个问题,一直没搞明白怎么实现的。
|
|
返回顶楼 | |
发表时间:2011-01-13
首先,我承认,qianhd是装*B的,即使不是,那也没有丝毫道德可言。阿门,原谅我这么说。
楼主所谓的大图片三缓冲,对内存可是高要求的! |
|
返回顶楼 | |
发表时间:2011-01-13
这本质说应该是属于业务级别的缓存,更前面还有显卡帮你做的缓存,更后面自然可以在内存操作根据自己业务特性进行缓存,甚至更后台数据存储部分也可以根据需要缓存
|
|
返回顶楼 | |
发表时间:2011-01-13
最后修改:2011-01-13
vision2000 写道 qianhd 写道 jorneyR 写道 qianhd 写道 有数据证明吗?
从原理上看 这完全是无稽之谈 从我测试的数据来看 更加是无稽之谈 为了让差距更加明显 我将初始尺寸改成1400*600 线条长度小于0.05 总共1048577个点 我加了一个线程 会定时修改frame的size 然后在paintComponent开始时记录时间,结束时候打印执行时间 所谓的3缓冲完全绘图一次 耗时1.5-1.8秒 默认双缓冲完全绘图一次 耗时1.5-1.8秒 没看出来所谓的3缓冲有任何的性能提升 呵呵,就算我在扯蛋吧,没什么好争论的. 有时间可以去看看Swing方面的书,如Filthy Rich Client等之类的 装啥B啊 不就本30多块的书嘛 只可惜你看了也白看 你大部分的回帖都对人充满歧视,能不能守一点职业道德? 首先 我歧视谁了? 其次 数据说话 事实说话 再次 谁在装*B? 我贴数据证明 楼主说 "没啥好争 你不懂的 去看书." 尽信书不如无书 任何优化手段都是有应用场景的 |
|
返回顶楼 | |
发表时间:2011-01-13
与其闲扯蛋,还不如把楼主帖的代码拿下来实实在在的跑一把试试,以下老三用数据说话。
楼主帖的原代码在我的机器上,双缓冲、三缓冲表现几乎一样,8000到8015毫秒 但是把结束条件改为if(len < 0.1),三缓冲的优势很明显,10000到10015毫秒,而双缓冲则用了14000到15000毫秒,这个时候更变态的还有一点,双缓冲的时候,timer结束后,点X去关闭窗口,点了之后要过5秒左右才能关闭,而三缓冲则是立竿见影瞬间关闭。 |
|
返回顶楼 | |
发表时间:2011-01-13
003 写道 写自己的代码,赚自己的银子,其它的都是浮云
是的,唯有独善其身 |
|
返回顶楼 | |
发表时间:2011-01-13
003 写道 与其闲扯蛋,还不如把楼主帖的代码拿下来实实在在的跑一把试试,以下老三用数据说话。
楼主帖的原代码在我的机器上,双缓冲、三缓冲表现几乎一样,8000到8015毫秒 但是把结束条件改为if(len < 0.1),三缓冲的优势很明显,10000到10015毫秒,而双缓冲则用了14000到15000毫秒,这个时候更变态的还有一点,双缓冲的时候,timer结束后,点X去关闭窗口,点了之后要过5秒左右才能关闭,而三缓冲则是立竿见影瞬间关闭。 可能跟机器与系统有关吧,我的是MBP133,CPU双核2.4G,显卡GF 8600M。 下面是在我的机器上,Snow Leopard里的状态 len < 0.5: 三缓冲17毫秒左右 Swing双缓冲280毫秒左右 len < 0.1: 三缓冲200毫秒左右 Swing双缓冲8500毫秒左右,窗口出现忙的状态 没有在Linux和Windows里测试过,具体有没有效率不清楚,没测试过,^_^,什么也不敢说 |
|
返回顶楼 | |
发表时间:2011-01-13
dearsunkey 写道 所谓双缓冲不就是第一次内存绘制,第二次一次性展示到屏幕上吗? 如果是这种逻辑,那么你三缓冲不但不能提高效率反而会大打折扣,不是吗? 个人拙见
不一样,例如给图片处理效果时,要进行大量的计算,如果你是直接去操作BufferedImage的像素,setRGB或者操作它的Raster,这时候速度就不如用PixelGrabber取得像素数据,处理完后再用MemoryImageSource生成图片快。 因为对Swing back-buffer的操作需要用到更多的内部调用与内部绘制的操作协调等,需要更多的资源,而对BufferedImage操作,系统不关心你在做什么,也不知道你在做什么,它只关心一次性绘制图片,所以速度上才会快一点。 |
|
返回顶楼 | |
发表时间:2011-01-13
qianhd 写道 JE帐号 写道 我不是做游戏或者图像显示的,但是以前玩游戏调优显卡设置时,曾经了解过一些三重缓冲.
三重缓冲不是为了提高画面的帧数,原理上讲三重缓冲和双缓冲在帧数上应该差不多.三重缓冲主要是为了解决使用双缓冲时带来的画面的撕裂感,最初时为了解决这种撕裂感,都是开启垂直同步选项以便人为的控制画面刷新节奏,但是这个选项会大大的降低画面的帧数,所以才又出现三重缓冲这种通过增加资源消耗但是不人为去控制画面刷新节奏的方法. 我用我的机子跑了一下,LZ的代码跑下来两种方式没说呢么差别,但是我把if (len < 0.5) 改成if (len < 0.1) 后,确实是三重缓冲这种方式更快. 比较奇怪为什么会这样?难道说基于显卡计算的三重缓冲和基于CPU计算的三重缓冲有这样的差异? 显卡三重缓冲是针对打开垂直同步以后 如果帧数小于刷新率 帧数会被限制到1/2刷新率 1/3 甚至更低 引入此技术是为了解决这个问题 跟这个帖子中的三缓冲完全是两码事 嗯,这个是逻辑上的三缓冲,不是硬件加速的三缓冲,差别还是比较大的。 |
|
返回顶楼 | |