此代码读出我的sqlite表的所有entrows并将它们放入列表中。我已经尝试使用Threads减少加载时间,并在返回列表之前检查所有这些内容是否以join()结束。但是,如果我以线程的形式进行查询,我会进行两次委托。
int main(int argc, char *argv[]) {
pthread_t client_thread;
pthread_attr_t attr;
...
while(1) { /* main accept() loop */
sin_size = sizeof(struct sockaddr_in);
if ((new_fd = accept(sockfd, (struct sockaddr *)&their_addr, \
&sin_size)) == -1) {
perror("accept");
continue;
}
printf("server: got connection from %s\n", \
inet_ntoa(their_addr.sin_addr));
pthread_attr_t attr;
pthread_attr_init(&attr);
for (int i = 0; i < MAX_CLIENTS; i++) {
pthread_create(&client_thread, &attr, decider, new_fd);
pthread_join(client_thread,NULL);
}
...
如何使用Threads减少此for循环的查询时间?
答案 0 :(得分:0)
你不能。
Sqlite不是线程安全的,这意味着您的SQLiteHelper默认锁定您的数据库。
原因是您一次只能通过一个连接/事务进行访问。
使用以下命令定义要抓取的字段,使其快一点:
SELECT field1,field2,anotherfield FROM tura_spieler
您可能还希望index提高您的速度。
如果您想根据您想加入的其他人查询字段。
如果你是Android和Sqlite的新用户,你应该看看一个名为Room的新知识库,它提供了一个易于使用的paging library