如何提高对数据库进行多次调用的Java应用程序的性能?
据我所知,java程序的执行非常快,减慢应用程序速度的主要是网络和IO操作 例如,如果我有一个For循环运行10000次,它打开一个文件,处理一些数据并将数据保存回文件中如果应用程序运行缓慢,不是因为循环执行10000次,而是因为循环中的文件打开和关闭。 我有一个MVC应用程序,在我查看页面之前,我先浏览一个控制器,该控制器依次调用服务,最后调用一些DAO方法 问题是在页面加载之前有太多的查询被触发,因此页面加载时间为2分钟,这很可怜。 由于服务调用不同的DAO方法,并且每个DAO方法使用不同的连接对象,因此我考虑这样做:“只创建一个服务将调用的DAO方法,此DAO方法将在一个连接对象上触发所有查询。” 因此,这将节省连接和断开与数据库连接的时间 但是,我的应用程序中的连接对象来自连接池。大多数连接池不会关闭连接,而是将它们发送回连接池。因此,我的上述解决方案不会产生任何效果,因为无论如何都不会打开和关闭连接如何提高对数据库进行多次调用的Java应用程序的性能?,java,performance,Java,Performance,据我所知,java程序的执行非常快,减慢应用程序速度的主要是网络和IO操作 例如,如果我有一个For循环运行10000次,它打开一个文件,处理一些数据并将数据保存回文件中如果应用程序运行缓慢,不是因为循环执行10000次,而是因为循环中的文件打开和关闭。 我有一个MVC应用程序,在我查看页面之前,我先浏览一个控制器,该控制器依次调用服务,最后调用一些DAO方法 问题是在页面加载之前有太多的查询被触发,因此页面加载时间为2分钟,这很可怜。 由于服务调用不同的DAO方法,并且每个DAO方法使用不同的
如何提高应用程序的性能?首先,您应该使用Profiler之类的工具准确地确定时间花在哪里 一旦知道根本原因,您就可以看到是否可以优化操作,即删除不必要的步骤。如果没有,则可以查看操作的结果是否可以缓存和重用 如果不准确了解需要花费时间的处理过程,就很难进行任何合理的优化。您可以使用which use连接池,调用数据库IO的成本很高,但大多数情况下,打开和关闭数据库连接需要大量时间。 您还可以增加maxIdle时间(池中可以保持空闲的最大连接数)
此外,如果重用池中的连接对象,则可以查看内存中的数据网格,这意味着连接/断开不会产生任何性能问题 我同意Ashwine K Jha的观点,剖析器会给你一些清晰的信息,告诉你可以优化什么 同时,一些其他想法/建议:
- 扩展数据库。也许数据库本身就是很慢
- 使用“二级缓存”或应用程序会话缓存来
可能会加快速度并减少查询的需要
数据库 - 更改查询、应用程序或架构以减少 打过电话