Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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 哪一个更有效,一个方法调用一个值列表,还是对每个值进行多个调用?_Java_List_Call - Fatal编程技术网

Java 哪一个更有效,一个方法调用一个值列表,还是对每个值进行多个调用?

Java 哪一个更有效,一个方法调用一个值列表,还是对每个值进行多个调用?,java,list,call,Java,List,Call,我有一个从文件中读取值的方法(读取方法),并从数据访问对象(DAO)类调用另一个方法,该类将这些值存储到DB(存储方法)中。我的问题是:我应该将读取方法中读取的所有值作为列表传递给存储方法(这样可以节省数百个方法调用,但在读取方法迭代过程中需要在存储方法中的列表上创建列表),还是应该为每个值单独调用存储方法(这意味着有数百个方法调用,但不需要创建和迭代列表)。从性能和良好实践的角度来看,哪种方法更有效?您应该一次读取所有方法,作为列表,并使用类似JDBC批处理更新的方法一次性或批量存储它们 但是

我有一个从文件中读取值的方法(读取方法),并从数据访问对象(DAO)类调用另一个方法,该类将这些值存储到DB(存储方法)中。我的问题是:我应该将读取方法中读取的所有值作为列表传递给存储方法(这样可以节省数百个方法调用,但在读取方法迭代过程中需要在存储方法中的列表上创建列表),还是应该为每个值单独调用存储方法(这意味着有数百个方法调用,但不需要创建和迭代列表)。从性能和良好实践的角度来看,哪种方法更有效?

您应该一次读取所有方法,作为
列表,并使用类似JDBC批处理更新的方法一次性或批量存储它们


但是,一个接一个地执行这些操作绝对是不可能的。这会导致太多的网络/IO操作。

唯一可以确定的方法是对各种选项进行计时。但是,由于在这个过程中要访问数据库,这很可能占主导地位。减少数据库访问的变量可能是最快的。如果两个变量都是s对数据库有同样的影响,那么我希望它们会花费类似的时间。调用方法和创建对象要比与数据库通信快几个数量级。

您有多个值,因此必须有人迭代这些值。唯一的问题是:谁

一般来说:只要您谈到DB访问(读写),分配列表、迭代列表和执行一些方法调用的开销与一个DB调用的开销相比可以忽略不计(我们谈论的是数百个调用,而不是数十亿个,对吗?).在大多数情况下,DB调用类似于远程过程调用,写入数据库将写入磁盘-另一个出色的性能吸盘


因此,在大多数情况下,如果最小化对DB的调用,您就可以获得性能。如果DB访问层知道完整的任务,那么这可以更容易地完成。因此,如果您给DAO一个列表,它可以执行诸如预处理语句、批处理更新之类的操作。如果只提供一些零碎的东西,这些事情就不可能实现良好的性能。

Ac访问硬盘是这里最大的开销。如果可以,请从硬盘读取一次。如果不能,请读取到缓冲区中,并在使用完毕后重新填充。此操作适用于线程,请尝试一次。

数据库资源有限,应尽量减少数据库命中以获得更好的性能

如果将数据库命中和操作列表的成本进行比较,则可以忽略不计

因此,创建一个列表并尝试执行批处理操作,而不是对每个记录执行一个操作


<> P>数据库交互是一个很好的实践,也是一个很好的选择。

< p>关于好的实践回答你的问题,你必须考虑DAO方法在你的应用程序中的用法。如果你看到它从一个原点被称为多个值的多次,那么我认为你应该通过。方法的列表。但是,如果您有更多只调用方法的一个值的情况,那么您应该在该粒度上定义它

其他人关于数据库访问的说法仍然有效。如果您的情况可能,请尝试批处理多个数据库访问