我的应用程序具有以下结构:
Glassfish作为服务器和Java EE 6结构(JSF + EJB + JPA)。
我有一个包含此代码的函数
public boolean function1(type value)
{
boolean result = false;
if()
{
.......
}
else
{
.........
}
return result ;
}
public void mainfunction(List<type> Listvalues)
{
for(int i=0;i<Listvalues.size;i++)
{
Listvalues.get(i).setparametre(function1(Listvalues.g(i)))
}
}
当我使用大小为&gt;的列表执行main函数时100000需要10分钟。
我的问题是,如果我的笔记本电脑配置增加,执行时间减少了多少?以及我的笔记本电脑配置中的哪个参数需要更改?它也依赖于JDK吗?
我的笔记本电脑配置:intel core i7-2670QM CPU @ 2.20 GHz(8个CPU) Ram 4 gb windows 7 64bit
答案 0 :(得分:0)
如果没有进一步的细节,很难给出答案。从我看到的一点点,我可以建议:
最后,我可以从你的代码中猜到的唯一重大改进是尝试并行(即多线程版本),但是,正如我所说,很难说更多,没有细节)。通过这种方式重写代码可能会带来一些小改进:
for ( Type item: listValues )
item.setParameter ( function1 ( item ) );
这可以避免两次调用List.get()(这有点贵),最重要的是,它通过Collection.iterator()遍历列表,如果你有一个LinkedList,它比使用索引快得多
请注意,我还根据Java约定(和英语语法)重命名了变量和类型。
编辑:从下面的评论中我知道,我应该提到一般性问题,如何评估程序的性能以及如何改进?首先,您应该掌握常用算法和数学分支的知识,例如图论或运筹学。还有一个计算复杂性理论,它允许您处理算法分析和优化(http://tinyurl.com/q52zxs2)。答案 1 :(得分:0)
即使在慢速处理器上循环遍历100,000个对象也不需要10分钟。您需要做的是确定代码中的内容导致缓慢。它不是您发布的循环或if / else语句。正如zakmck建议的那样,查看数据库或IO操作将产生最佳结果。内存和执行速度很快,但磁盘,io和数据源都很慢。