作者: |
blbz (冰力不足) |
▲▲▲△△ |
-
|
普通会员 |
|
2014-2-7 18:09:17 |
标题: |
delphi xe5 ios的硬伤:ComboBox的Item超过千行就启动不了 |
浏览:677 |
|
加入我的收藏 |
楼主: |
delphi xe5 ios的硬伤:ComboBox的Item超过千行就启动不了
在虚拟机上完美运行, 到了真机, 特别是iphone,卡在登陆界面。
试过动态生成: for I := 0 to 3000 do begin s := ary[i]; ComboBox1.Items.Add(s); end; 结果也是卡在界面动弹不得。。。。。。
求大侠出手: 动态生成ComboBox1.Item, 每次Clear清空ComboBox1.Item后动态添加上几行, 配合手势的刷动进行, 这样, 也许就不会卡了。 但俺发现很难的,因为ComboBox只有选定后才有个OnChange响应,在手刷的时候,根本没啥事件响应。
或者,有什么好的控件介绍?
拜谢!
----------------------------------------------
- |
作者: |
blbz (冰力不足) |
▲▲▲△△ |
-
|
普通会员 |
|
2014-2-7 18:10:13 |
1楼: |
动态300行都要等很久。 吐血~~~
----------------------------------------------
-
|
作者: |
|
2014-2-7 19:10:49 |
2楼: |
3000行,就是在手机上面,翻来翻去也要花不少时间吧?
想想其他办法吧。
----------------------------------------------
-
|
作者: |
blbz (冰力不足) |
▲▲▲△△ |
-
|
普通会员 |
|
2014-2-7 19:17:44 |
3楼: |
epzybook您好! 请问您真的试过3000行都行吗?
办法是有的, 但是添加几个按钮和Label, 不用ComboBox, 就失去了IOS的风格, 这样的收费软件卖出去, 客户用起来体验一定很奇怪。
----------------------------------------------
-
|
作者: |
blbz (冰力不足) |
▲▲▲△△ |
-
|
普通会员 |
|
2014-2-7 19:20:04 |
4楼: |
刷起ComboBox来, 有那种“哒哒哒”的美感, 要顾及用户的习惯吧。
----------------------------------------------
-
|
作者: |
szlbz (szlbz) |
▲▲▲▲△ |
-
|
盒子活跃会员 |
|
2014-2-7 19:45:56 |
5楼: |
从300行中选择?这体验绝对不好
----------------------------------------------
-
|
作者: |
blbz (冰力不足) |
▲▲▲△△ |
-
|
普通会员 |
|
2014-2-7 20:49:17 |
6楼: |
谢谢szlbz!谢谢epzybook!300行体验确实不好,3000行更不行。俺想到一个折衷办法了,谢谢您们给予俺解决问题的灵感!
----------------------------------------------
-
|
作者: |
blbz (冰力不足) |
▲▲▲△△ |
-
|
普通会员 |
|
2014-2-7 20:53:51 |
7楼: |
谢谢internetzs!下午装了dpf,但是不成功,控件装好了都是灰色没激活的,不知道问题出在哪,只好明天再继续了。
----------------------------------------------
-
|
作者: |
|
2014-2-7 21:07:26 |
8楼: |
用最新版本的 安装还可以。 看好英文的安装说明。
----------------------------------------------
-
|
作者: |
blbz (冰力不足) |
▲▲▲△△ |
-
|
普通会员 |
|
2014-2-7 21:11:13 |
9楼: |
谢谢ff2001!
----------------------------------------------
-
|
作者: |
|
2014-2-7 22:10:56 |
10楼: |
所有的 TStrings UI控件,在插入数据时候 最好禁止刷新
ComboBox1.items.beginupdate;
.....
ComboBox1.items,endupdate;
速度快很多
----------------------------------------------
一场轰轰烈烈的现代土改革命,不亚于英国的圈地运动,把我朝GDP推向全球第二,成为中央和地方财政的盛宴! 得于斯者,毁于斯! http://hi.baidu.com/tintinsoft
|
作者: |
blbz (冰力不足) |
▲▲▲△△ |
-
|
普通会员 |
|
2014-2-8 5:28:59 |
11楼: |
零输好 前辈!谢谢指点!两句代码解决困扰俺 2 天的问题!您太帅了!大清早起来,要祝您以及所有指点俺的大侠新年发大财喔!
----------------------------------------------
-
|
作者: |
|
2014-2-8 8:28:44 |
12楼: |
嘿嘿
----------------------------------------------
-
|
作者: |
|
2014-2-8 9:21:55 |
13楼: |
多和谐的帖子,顶起
----------------------------------------------
-
|
作者: |
|
2014-2-8 10:14:39 |
14楼: |
移动开发与桌面开发是不一样的。上次发布会上听李维讲,一般只推荐取少量的数据。
----------------------------------------------
After three days without programming, life becomes meaningless.
|
作者: |
|
2014-2-8 10:45:53 |
15楼: |
估计楼主是为了测试FM的极限性能,感谢楼主的评测!
----------------------------------------------
-
|
作者: |
|
2014-2-8 14:43:46 |
16楼: |
5:28起床看贴写代码,,佩服了你这个妹纸!
----------------------------------------------
一场轰轰烈烈的现代土改革命,不亚于英国的圈地运动,把我朝GDP推向全球第二,成为中央和地方财政的盛宴! 得于斯者,毁于斯! http://hi.baidu.com/tintinsoft
|
作者: |
locet (locet) |
▲△△△△ |
-
|
注册会员 |
|
2014-2-8 20:46:53 |
17楼: |
1000多条记录,用combobo来显示,本身是不是有问题了
----------------------------------------------
-
|
作者: |
|
2014-2-8 22:13:06 |
18楼: |
硬伤..........
Excel每个Sheet最多只能65535行,我不知道是不是应该投诉微软,为什么有65535行的“硬伤”。
----------------------------------------------
-
|
作者: |
lynu (lynu) |
▲▲▲▲△ |
-
|
盒子活跃会员 |
|
2014-2-9 13:00:07 |
19楼: |
别说combobox了,就算是数据集,3000行记录一次拉回都是不合理的设计!combobox作为下拉选择,8-16行是上限了,超过应改以list显示,list也不要超过30行.要考虑用户的使用体验.
----------------------------------------------
-
|
作者: |
blbz (冰力不足) |
▲▲▲△△ |
-
|
普通会员 |
|
2014-2-10 3:04:21 |
20楼: |
谢谢各位大侠指点。 俺发现,问题其实蛮有探讨和学习之处,俺从百度搜索到一篇文章,刚好是本站武稀松大侠写的:
从DelphiXE4的例子分析FireMonkey ListBox效率问题. http://www./?p=313
尝试着在主Form单元加入GlobalUseDirect2D := False;关闭D2D,那么FMX在渲染界面的时候启用的就是GDIPlus. 循环10000次的时间由10秒缩减到3秒. 罪魁祸首在于D2D的API速度.
......
再尝试编译,发现代码10000次循环代码时间已经变为1秒了.
......
再看结果,10000次循环变为800毫秒.虽然还是有点慢.但是毕竟可以勉强接受了.
总结: 1.D2D的BitMap的map处理上,比GDIPlus慢很多有,10秒减到3秒,(这个也可能是我显卡不行吧,没有在其他计算机上试过).D2D正常应该是把图都放到显存中,然后处理. FireMonkey的ListBox这种场景下有多个自定义的图,每次都要创建D2D对象,把用户图片从内存传到显存.所以D2D不太适合这种场景. 2.这个是FireMonkey框架的设计问题.TControl.RefreshInheritedCursorForChildren被调用的次数太多.没判断BeginUpdate不需要刷新的情况 3.和Demo的代码有关,和FireMonkey的实现都有关,IndexOf不该这样频繁的调用.或者说ListItem的GetIndex方法不应该依赖IndexOf.否则数量非常多的时候频繁调用效率有问题. 4.ListBox设计的问题.导致添加大量Items的时候必然慢.因为每个Item都要事先Create,比如有一百万Item就要事先创建一百万次.其实这里可以设计一种模仿Windows的ListView的Virtual方式或者Android的ListView的方式.事先不创建这些Item,只调用ListBox的SetCount即可,然后可以给Listbox一个OnCreateItem方法,需要显示哪些Item就调用OnCreateItem来创建.这样既节约内存,又可以做到高速.或许易博龙认为这是个比较少的需求,所以留给我们自己来实现.
----------------------------------------------
-
|
作者: |
blbz (冰力不足) |
▲▲▲△△ |
-
|
普通会员 |
|
2014-2-10 3:23:04 |
21楼: |
FireMonkey中,动态创建一个bmp位图,就必须有很多技巧,何况是combobox,listbox这些,不是实战写代码,是体会不到这些苦的。
----------------------------------------------
-
|
作者: |
blbz (冰力不足) |
▲▲▲△△ |
-
|
普通会员 |
|
2014-2-10 3:42:35 |
22楼: |
FireMonkey好多代码,在win32平台上运行成功,到了ios真机,又往往没辙。泪奔~
----------------------------------------------
|
|