经过一段时间的使用,创建编辑器UI引起的卡顿主要有以下两方面。
- 短时间内大量创建UI,像
Vertical Box
这种类型的容器,短时间创建几百个子容器不会造成卡顿,但是如果创建成千上万,就会引起卡顿。 - 从其他地方的数据接口获取了累计上万的数据,存放到了UI上。往往是根据获取到数据从而创建UI,造成双重卡顿。数据量大,创建的UI多。
UI创建问题
如果不需要双滚轮的效果,可以使用TreeView
和ListView
这样容器,它们在根据几万条数据创建大量UI时,做了一定的UI上的优化,优化原理,类似分页。
虽然有几万条数据,但是它们并没有创建大量UI,只是创建了稍稍超过铺满一页数量的UI,通过换页的方式来动态更换数据。
因此导致的问题就是,如果UI上让第2行的数据UI高亮,在不断往下滑动或者滚动UI的时候,会发现每隔一段数据量的行数,就会出现一行高亮的UI。 原因就是它只是创建了少量的UI,通过更换数据的方式,去达到视觉上创建大量UI的目的。
如果想解决
选中某一行高亮的bug,可以在创建子项的时候,传递一个UUID,在EntryWidget
中动态去判断是否是你传入的这个UUID来更改是否要在某一行上进行高亮。什么是EntryWidget
这个去学习一下ListView
或者TreeView
就知道了。
数据量大问题
我的数据来源是从继承了引擎的UEditorSubsystem
或者UEngineSubsystem
的类中。关于子系统的使用可以参考如下链接
c++ 截图如下:
蓝图如下:
在该方法中,并没有把所有的数据进行获取,而只是拿到了一页的数据,一页的数据大概在100条数据左右。这样子就解决了,一下子获取所有数据造成的卡顿。
最后的最后,如果您觉得这篇文章帮助到您,请资助下这位朋友的粮食,谢谢!