📄 newerperformancetest.java
字号:
//$Id: NewerPerformanceTest.java,v 1.1.2.3 2003/11/08 09:46:22 oneovthafew Exp $package org.hibernate.test;import java.io.Serializable;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.util.ArrayList;import java.util.List;import junit.framework.Test;import junit.framework.TestSuite;import junit.textui.TestRunner;import net.sf.hibernate.Session;import net.sf.hibernate.cfg.Environment;import net.sf.hibernate.connection.ConnectionProvider;import net.sf.hibernate.connection.ConnectionProviderFactory;public class NewerPerformanceTest extends TestCase { public NewerPerformanceTest(String arg0) { super(arg0); } public void testMany() throws Exception { ConnectionProvider cp = ConnectionProviderFactory.newConnectionProvider( Environment.getProperties() ); long hiber=0; long jdbc=0; for ( int n=0; n<20; n++ ) { Session s = openSession(); s.delete("from Simple"); s.flush(); Simple[] simples = new Simple[n]; Serializable[] ids = new Serializable[n]; for ( int i=0; i<n; i++ ) { simples[i] = new Simple(); simples[i].init(); simples[i].setCount(i); ids[i] = new Long(i); s.save(simples[i], ids[i]); } s.flush(); s.connection().commit(); s.close(); //allow cache to settle s = openSession(); hibernate(s, simples, ids, n, "h0"); s.close(); Connection c = cp.getConnection(); directJDBC( c, simples, ids, n, "j0" ); cp.closeConnection(c); s = openSession(); hibernate(s, simples, ids, n, "h0"); s.close(); c = cp.getConnection(); directJDBC( c, simples, ids, n, "j0" ); cp.closeConnection(c); //Now do timings int N=30; long time = System.currentTimeMillis(); for (int i=0; i<N; i++) { s = openSession(); hibernate(s, simples, ids, n, "h1"); s.close(); } hiber += System.currentTimeMillis() - time; time = System.currentTimeMillis(); for (int i=0; i<N; i++) { c = cp.getConnection(); directJDBC( c, simples, ids, n, "j1" ); cp.closeConnection(c); } jdbc += System.currentTimeMillis() - time; time = System.currentTimeMillis(); for (int i=0; i<N; i++) { s = openSession(); hibernate(s, simples, ids, n, "h2"); s.close(); } hiber += System.currentTimeMillis() - time; time = System.currentTimeMillis(); for (int i=0; i<N; i++) { c = cp.getConnection(); directJDBC( c, simples, ids, n, "j2" ); cp.closeConnection(c); } jdbc += System.currentTimeMillis() - time; time = System.currentTimeMillis(); for (int i=0; i<N; i++) { s = openSession(); hibernate(s, simples, ids, n, "h1"); s.close(); } hiber += System.currentTimeMillis() - time; time = System.currentTimeMillis(); for (int i=0; i<N; i++) { c = cp.getConnection(); directJDBC( c, simples, ids, n, "j1" ); cp.closeConnection(c); } jdbc += System.currentTimeMillis() - time; } System.out.println( "Hibernate: " + hiber + "ms / Direct JDBC: " + jdbc + "ms = Ratio: " + ( (float) hiber )/jdbc ); cp.close(); System.gc(); } public void testSimultaneous() throws Exception { ConnectionProvider cp = ConnectionProviderFactory.newConnectionProvider( Environment.getProperties() ); for ( int n=2; n<4000; n*=2 ) { Session s = openSession(); s.delete("from Simple"); s.flush(); Simple[] simples = new Simple[n]; Serializable[] ids = new Serializable[n]; for ( int i=0; i<n; i++ ) { simples[i] = new Simple(); simples[i].init(); simples[i].setCount(i); ids[i] = new Long(i); s.save(simples[i], ids[i]); } s.flush(); s.connection().commit(); s.close(); //allow cache to settle s = openSession(); hibernate(s, simples, ids, n, "h0"); s.close(); Connection c = cp.getConnection(); directJDBC( c, simples, ids, n, "j0" ); cp.closeConnection(c); s = openSession(); hibernate(s, simples, ids, n, "h0"); s.close(); c = cp.getConnection(); directJDBC( c, simples, ids, n, "j0" ); cp.closeConnection(c); //Now do timings s = openSession(); long time = System.currentTimeMillis(); hibernate(s, simples, ids, n, "h1"); long hiber = System.currentTimeMillis() - time; s.close(); c = cp.getConnection(); time = System.currentTimeMillis(); directJDBC( c, simples, ids, n, "j1" ); long jdbc = System.currentTimeMillis() - time; cp.closeConnection(c); s = openSession(); time = System.currentTimeMillis(); hibernate(s, simples, ids, n, "h2"); hiber += System.currentTimeMillis() - time; s.close(); c = cp.getConnection(); time = System.currentTimeMillis(); directJDBC( c, simples, ids, n, "j2" ); jdbc += System.currentTimeMillis() - time; cp.closeConnection(c); s = openSession(); time = System.currentTimeMillis(); hibernate(s, simples, ids, n, "h2"); hiber += System.currentTimeMillis() - time; s.close(); c = cp.getConnection(); time = System.currentTimeMillis(); directJDBC( c, simples, ids, n, "j2" ); jdbc += System.currentTimeMillis() - time; cp.closeConnection(c); System.out.println( "Objects: " + n + " - Hibernate: " + hiber + "ms / Direct JDBC: " + jdbc + "ms = Ratio: " + ( (float) hiber )/jdbc ); } cp.close(); System.gc(); } public void testHibernateOnly() throws Exception { for ( int n=2; n<4000; n*=2 ) { Session s = openSession(); Simple[] simples = new Simple[n]; s.delete("from Simple"); s.flush(); Serializable[] ids = new Serializable[n]; for ( int i=0; i<n; i++ ) { simples[i] = new Simple(); simples[i].init(); simples[i].setCount(i); ids[i] = new Long(i); s.save(simples[i], ids[i]); } s.flush(); s.connection().commit(); s.close(); //Now do timings s = openSession(); long time = System.currentTimeMillis(); hibernate(s, simples, ids, n, "h1"); long hiber = System.currentTimeMillis() - time; s.close(); s = openSession(); time = System.currentTimeMillis(); hibernate(s, simples, ids, n, "h2"); hiber += System.currentTimeMillis() - time; s.close(); s = openSession(); time = System.currentTimeMillis(); hibernate(s, simples, ids, n, "h2"); hiber += System.currentTimeMillis() - time; s.close(); System.out.println( "Objects: " + n + " - Hibernate: " + hiber ); } System.gc(); } public void testJdbcOnly() throws Exception { ConnectionProvider cp = ConnectionProviderFactory.newConnectionProvider( Environment.getProperties() ); for ( int n=2; n<4000; n*=2 ) { Session s = openSession(); Simple[] simples = new Simple[n]; s.delete("from Simple"); s.flush(); Serializable[] ids = new Serializable[n]; for ( int i=0; i<n; i++ ) { simples[i] = new Simple(); simples[i].init(); simples[i].setCount(i); ids[i] = new Long(i); s.save(simples[i], ids[i]); } s.flush(); s.connection().commit(); s.close(); //Now do timings Connection c = cp.getConnection(); long time = System.currentTimeMillis(); directJDBC( c, simples, ids, n, "j1" ); long jdbc = System.currentTimeMillis() - time; cp.closeConnection(c); c = cp.getConnection(); time = System.currentTimeMillis(); directJDBC( c, simples, ids, n, "j2" ); jdbc += System.currentTimeMillis() - time; cp.closeConnection(c); c = cp.getConnection(); time = System.currentTimeMillis(); directJDBC( c, simples, ids, n, "j2" ); jdbc += System.currentTimeMillis() - time; cp.closeConnection(c); System.out.println( "Objects: " + n + " Direct JDBC: " + jdbc ); } cp.close(); System.gc(); } /*private void hibernate(Session s, Simple[] simples, Serializable[] ids, int N, String runname) throws Exception { for ( int i=0; i<N; i++ ) { s.get( Simple.class, ids[i] ); //s.find("from Simple s where s.id = ?", ids[i], Hibernate.LONG); } //s.flush(); s.connection().commit(); } private void directJDBC(Connection c, Simple[] simples, Serializable[] ids, int N, String runname) throws SQLException { for ( int i=0; i<N; i++ ) { PreparedStatement select = c.prepareStatement("SELECT s.id_, s.name, s.address, s.count_, s.date_, s.pay, s.other FROM Simple s where s.id_=?"); select.setLong( 1, ( (Long) ids[i] ).longValue() ); ResultSet rs = select.executeQuery(); rs.next(); /*new Long( rs.getLong(1) ); rs.getString(2); rs.getString(3); rs.getInt(4); rs.getDate(5); rs.getFloat(6); rs.getLong(7);*/ /*Simple s = new Simple(); new Long( rs.getLong("id_") ); rs.wasNull(); s.setName( rs.getString("name") ); rs.wasNull(); s.setAddress( rs.getString("address") ); rs.wasNull(); s.setCount( rs.getInt("count_") ); rs.wasNull(); s.setDate( rs.getTimestamp("date_") ); rs.wasNull(); s.setPay( new Float( rs.getFloat("pay") ) ); rs.wasNull(); rs.getLong("other"); rs.wasNull(); s.setOther(null); rs.close(); select.close(); } c.commit(); }*/ private void hibernate(Session s, Simple[] simples, Serializable[] ids, int N, String runname) throws Exception { s.find("from Simple s"); s.connection().commit(); } private void directJDBC(Connection c, Simple[] simples, Serializable[] ids, int N, String runname) throws SQLException { List result=new ArrayList(); PreparedStatement select = c.prepareStatement("SELECT s.id_ as id_, s.name as name, s.address as address, s.count_ as count_, s.date_ as date_, s.pay as pay, s.other as other FROM Simple s"); ResultSet rs = select.executeQuery(); while ( rs.next() ) { /*new Long( rs.getLong(1) ); rs.getString(2); rs.getString(3); rs.getInt(4); rs.getDate(5); rs.getFloat(6); rs.getLong(7);*/ Simple s = new Simple(); new Long( rs.getLong("id_") ); rs.wasNull(); s.setName( rs.getString("name") ); rs.wasNull(); s.setAddress( rs.getString("address") ); rs.wasNull(); s.setCount( rs.getInt("count_") ); rs.wasNull(); s.setDate( rs.getTimestamp("date_") ); rs.wasNull(); s.setPay( new Float( rs.getFloat("pay") ) ); rs.wasNull(); rs.getLong("other"); rs.wasNull(); s.setOther(null); result.add(s); } rs.close(); select.close(); c.commit(); } public String[] getMappings() { return new String[] { "Simple.hbm.xml" }; } public static Test suite() { return new TestSuite(NewerPerformanceTest.class); } public static void main(String[] args) throws Exception { TestRunner.run( suite() ); } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -