.NetとJavaを使用してOracle DBから1 mlnレコードを読み取ります。 .Netで私はJava ojdbc6シンクライアントでODP.Netを使用しています。 .Net読み込みデータには約10秒かかり、Javaでは約2分かかります。 なぜこのような大きな違いがありますか?.Netを使用してOracle DBからデータを読み取ることは、Javaを使用するよりも10倍高速です
ネット::ここで
はコードである
try
{
DateTime dt1 = DateTime.Now;
OracleConnection con = new OracleConnection();
con.ConnectionString = "Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=myHost)(PORT=myPort)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=myService)));User Id=myId;Password=myPass;";
con.Open();
string cmdQuery = "SELECT * FROM DROPME";
OracleCommand cmd = new OracleCommand(cmdQuery);
cmd.Connection = con;
cmd.CommandType = CommandType.Text;
int i = 0;
OracleDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
Object o1 = reader.GetValue(0);
Object o2 = reader.GetValue(1);
Object o3 = reader.GetValue(2);
Object o4 = reader.GetValue(3);
Object o5 = reader.GetValue(4);
Object o6 = reader.GetValue(5);
Object o7 = reader.GetValue(6);
i++;
}
DateTime dt2 = DateTime.Now;
double elapsed = (dt2 - dt1).TotalSeconds;
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
のJava:
try
{
long t0 = System.currentTimeMillis();
oracleDataSource = new OracleDataSource();
oracleDataSource.setURL("jdbc:oracle:thin:myId/[email protected]:myPort:myService");
Connection connection = oracleDataSource.getConnection();
PreparedStatement statement = connection.prepareStatement("SELECT * FROM DROPME");
ResultSet result = statement.executeQuery();
int i = 0;
while (result.next())
{
result.getObject(1);
result.getObject(2);
result.getObject(3);
result.getObject(4);
result.getObject(5);
result.getObject(6);
result.getObject(7);
i++;
}
long t1 = System.currentTimeMillis();
long elapsed = (t1 - t0)/1000;
int t = 0;
}
catch (Exception ex)
{
ex.printStackTrace();
}
EDIT:setFetchSizeメソッドは、()のおかげで、仕事をしてくれました。
ちょうど推測:Javaで をあなたが専門のネイティブクライアント.NETで、「どのようなレベル」とばかりJDBCドライバを使用している... しかし、一般的には、.NETは高速です;) – TheHe
私は思いますあなたは間違った前提から始めます:Javaは高速になることができます。 –