Ios 使用多线程并行加载多个表中的大数据
我正在尝试从Ultralite数据库的6个不同表中加载大约10K记录的数据 我为6个不同的表创建了不同的函数 我尝试使用NSInvokeOperations、NSOperations、GCD和NSOperation子类并行加载这些操作,但没有任何效果 实际上,从1个表加载10K需要4秒,从另外5秒开始,如果我将这2个表保持在队列中,则需要9秒。这意味着我的代码没有并行运行Ios 使用多线程并行加载多个表中的大数据,ios,performance,uitableview,grand-central-dispatch,nsthread,Ios,Performance,Uitableview,Grand Central Dispatch,Nsthread,我正在尝试从Ultralite数据库的6个不同表中加载大约10K记录的数据 我为6个不同的表创建了不同的函数 我尝试使用NSInvokeOperations、NSOperations、GCD和NSOperation子类并行加载这些操作,但没有任何效果 实际上,从1个表加载10K需要4秒,从另外5秒开始,如果我将这2个表保持在队列中,则需要9秒。这意味着我的代码没有并行运行 如何改善性能问题?好的,您必须使用Para和Time功能在线查询更多信息可能有多种方法 我的建议是: 将表视图的行数设置为
如何改善性能问题?好的,您必须使用Para和Time功能在线查询更多信息可能有多种方法 我的建议是:
- 将表视图的行数设置为精确计数(在您的情况下为10k)
- 表格视图经过优化,在开始时仅创建少量单元格(遵循拉动模式)。因此,cellForRowAtIndexPath在开始时只调用几次
- 拥有一个数组,在开始时只获取50个条目。有一个计数器变量
- 当用户滚动表格视图,计数达到50后,获取下50个项目(所需时间将非常少),并用下50个数据填充单元格。 继续做同样的事情
希望它能起作用。您应该分块获取记录(即在表中一次获取50-60条记录)。然后,当用户到达表的末尾时,再加载50-60条记录。请尝试使用此库:
关于并行性,请使用GCD,并在GCD的成功块调用时重新加载相应的表。请帮助我它的紧迫性涉及IO时没有真正的并行化:/CAPS LOCK键似乎卡住了。您好,谢谢您的回答,您能给我举个例子,比如如何获取下一个50项吗。实际上,我正在编写类似“select*from table”的查询。我可以在这种情况下应用您的概念吗?是的,您可以在tableview委托中:CellForRowatineXpath检查如下内容:if(indexPath.row==计数器变量){//fetch next 50 and append in your mutable array}。。。。。。对于每页获取50个数据,您可以使用select*from table limit 50,对于下一次使用select*from table limit 50100,依此类推(查询时不太确定请查看更多web)。