Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.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/2/spring/12.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 使用LocalValidatoryFactoryBean的性能问题_Java_Spring_Performance_Validation_Jakarta Ee - Fatal编程技术网

Java 使用LocalValidatoryFactoryBean的性能问题

Java 使用LocalValidatoryFactoryBean的性能问题,java,spring,performance,validation,jakarta-ee,Java,Spring,Performance,Validation,Jakarta Ee,我试图理解为什么我的程序执行时间这么长。我的程序的目标是导入CSV数据,并逐行验证它 似乎我90%的执行时间都花在了数据验证上。 这是我的验证功能: public static <T> HashSet<ConstraintViolation<T>> validate(Validator validator, T resource, Class<?>... groups) { return (HashSet<ConstraintViol

我试图理解为什么我的程序执行时间这么长。我的程序的目标是导入CSV数据,并逐行验证它

似乎我90%的执行时间都花在了数据验证上。 这是我的验证功能:

public static <T> HashSet<ConstraintViolation<T>> validate(Validator validator, T resource, Class<?>... groups) {
    return (HashSet<ConstraintViolation<T>>) validator.validate(resource, groups);
} 
我使用的验证器是LocalValidatorFactoryBean,在Spring中导入,如下所示:

<bean id="validator" name="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/>
我注意到验证在每次迭代中花费越来越多的时间。。。例如,如果我的CSV文件中有1000行类似的代码,第一行将在~55毫秒内验证,最后一行将在~900毫秒内验证

我不知道如何解释这种非线性执行时间,以及如何改进它:我有没有犯任何错误?我应该以不同的方式配置bean吗?我应该使用其他验证器吗?哪一个

谢谢您的时间:

您不是在使用LinkedList吗?这可以解释增长时间的原因,假设有许多列,并且对字段的访问不缓存行


尝试用一些无操作来代替验证,并观察时间是否改变。或者简单地调试一个调用,或者让它抛出并查看stacktrace,看看发生了什么有趣的事情。

你在验证什么。什么是T资源?你确定验证需要这么长时间吗?如果您使用的是JPA,那么验证可能也会完成,并且可能会随着YOUR一级缓存中实体的数量增加而增加。例如,我检查第一列是否是数字,第二列是否是介于5到255个字符之间的字符串,并遵循一些其他规则,等等。。。CVS文件可以很容易地为我必须处理的数据提供100列,每列可以有1-5条规则。顺便说一句,我确信我的验证函数几乎占用了所有时间~90%。是的,我使用的是JPA Hibernate。好的,检查你的验证逻辑,也正如前面提到的,Hibernate也使用验证,所以如果这也是混合的话,你甚至没有重复的验证,如果发生更改,基本上每个选择都会得到脏检查的性能。随着每个对象添加到一级缓存中,这将以非常线性的方式增加。但目前,如果看不到代码、配置等,很难判断。