Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果数据库查询小于100ms,我应该线程吗_Java_Android_Database_Performance_Android Asynctask - Fatal编程技术网

Java 如果数据库查询小于100ms,我应该线程吗

Java 如果数据库查询小于100ms,我应该线程吗,java,android,database,performance,android-asynctask,Java,Android,Database,Performance,Android Asynctask,我正在编写一个需要从数据库中写入和检索数据的应用程序。我想知道是否应该在thread/Asynctask中运行一个查询,因为它需要不到100毫秒的时间,事实上,一个调用通常需要30-70毫秒(包括解析游标)。此调用仅从2个(不同)数据库中的每个数据库检索一行。如果我添加一个asynctask,时间将达到120-170ms(我从开销中猜测)。在如此短的持续时间内使用线程/异步任务是否值得(或更好的实践) 最好在异步任务上运行查询。开始时,一切都很顺利,但当数据库变大时,查询可能需要超过秒的时间。然

我正在编写一个需要从数据库中写入和检索数据的应用程序。我想知道是否应该在thread/Asynctask中运行一个查询,因为它需要不到100毫秒的时间,事实上,一个调用通常需要30-70毫秒(包括解析游标)。此调用仅从2个(不同)数据库中的每个数据库检索一行。如果我添加一个asynctask,时间将达到120-170ms(我从开销中猜测)。在如此短的持续时间内使用线程/异步任务是否值得(或更好的实践)

最好在异步任务上运行查询。开始时,一切都很顺利,但当数据库变大时,查询可能需要超过秒的时间。然后,您应该能够为用户显示等待对话框,而不仅仅是冻结用户界面。

最好在异步任务上运行查询。开始时,一切都很顺利,但当数据库变大时,查询可能需要超过秒的时间。然后,您应该能够为用户显示等待对话框,而不仅仅是冻结UI。

我认为在需要实现并行性时,多线程是必要的。如果您的代码以串联方式运行,我的意思是从头到尾一个接一个地运行,那么您就不需要线程。

我认为当您需要实现并行性时,多线程是必要的。如果您的代码以串行方式运行,我的意思是从头到尾一个接一个地运行,那么您不需要线程。

如果您依赖于查询输出的结果,那么在任何情况下都必须等待结果

<>为了更好的使用数据库考虑使用<强>准备语句缓存> /强>(使用参数化准备语句)


这应该会提高一些性能。

如果您依赖于查询输出的结果,那么在任何情况下都必须等待结果

<>为了更好的使用数据库考虑使用<强>准备语句缓存> /强>(使用参数化准备语句)


这应该会提高一些性能。

任何需要花费时间的事情都不应该在主UI线程上完成。始终建议在异步任务中执行DB操作。其中一个主要原因是,操作所需的时间指标会因手机配置和其他参数而异。

任何需要花费时间的操作都不应在主UI线程上执行。始终建议在异步任务中执行DB操作。其中一个主要原因是,操作所需的时间指标会因手机配置和其他参数而异。

您希望在单独的线程中运行数据库查询的原因是,数据库是一个外部依赖项,您无法完全控制(在生产代码中)。这意味着,即使您的查询通常在100毫秒内运行良好,但有时会出现问题,您需要一种方法来处理查询根本不返回的情况。通过将此功能封装在单独的线程中,您可以更好地控制出错时发生的情况。例如,如果数据库有问题,可以设置一个超时时间段,在此时间段后,代码可以假定发生了错误,然后重试或终止挂起的查询线程,而不会导致整个程序被阻止,并需要重新启动才能继续。有几种技巧可以实现我刚才所说的,所以我不能说得太具体,因为我不知道你的具体情况涉及到什么,也不知道取舍可能是什么。我想我想说的总体观点是,我们为尝试而编写的代码与我们为投入生产而编写的代码之间有很大的区别


编写可靠的多线程代码是一项艰巨的工作。我建议您花点时间阅读并理解Goetz的书《Java并发性实践》,以帮助您解决并发性问题

希望在单独的线程中运行数据库查询的原因是,数据库是一个外部依赖项,您无法完全控制(在生产代码中)。这意味着,即使您的查询通常在100毫秒内运行良好,但有时会出现问题,您需要一种方法来处理查询根本不返回的情况。通过将此功能封装在单独的线程中,您可以更好地控制出错时发生的情况。例如,如果数据库有问题,可以设置一个超时时间段,在此时间段后,代码可以假定发生了错误,然后重试或终止挂起的查询线程,而不会导致整个程序被阻止,并需要重新启动才能继续。有几种技巧可以实现我刚才所说的,所以我不能说得太具体,因为我不知道你的具体情况涉及到什么,也不知道取舍可能是什么。我想我想说的总体观点是,我们为尝试而编写的代码与我们为投入生产而编写的代码之间有很大的区别


编写可靠的多线程代码是一项艰巨的工作。我建议您花点时间阅读并理解Goetz的书《Java并发性实践》,以帮助您解决并发性问题

如果你依赖于查询的结果继续进行下去,它将没有任何用处。如果你依赖于查询的结果继续进行下去,它将没有任何用处。谢谢,我有一个类似的想法。现在我确信线程是做事情的正确方法。谢谢,我也有类似的想法。现在我确信线程是做事情的正确方法。