我试图理解为什么我的程序的执行时间如此之长。我的程序的目的是导入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个相似的行,则第一个将被验证在~~约55ms,最后在~900ms。
我不知道如何解释这个非线性执行时间,以及如何改进它:我做错了吗?我应该以不同方式配置我的bean吗我应该使用其他验证器(哪一个?)?
谢谢你的时间:)
答案 0 :(得分:0)
你不是在使用LinkedList
吗?这可以解释增长的时间,假设有很多列,并且对字段的访问不会缓存行。
尝试通过某些无操作替换验证,并观察时间是否发生变化。或者只是调试一个调用(或让它抛出并查看堆栈跟踪)以查看有趣的事情发生。