0

私は jtds 接続ドライバーを使用して非常に新しいです。約 2500 の大きな xml を読み取り、SQL クエリを作成して SQL サーバーに対して実行するアプリケーションを作成しました。特定の量の xml に達すると、プログラムの実行でメモリが不足することがわかりました。メモリ アナライザーを使用して Eclipse で phd ダンプ ファイルをチェックしたところ、net.sourceforge.jtds.jdbc.cache.SimpleLRUCache が大量のメモリを保持していることがわかりました。一度 SQL サーバーに接続し、すべてのクエリをフラッシュするまで接続を維持します。以下は、サーバーに対してクエリを実行するための私のコードです。net.sourceforge.jtds.jdbc.cache.SimpleLRUCache クラスへのハンドルを取得する方法がわかりません。これは、キャッシュをクリアすると思われる clear メソッドがあるためです。繰り返しますが、私は jtds ドライバーについてあまり詳しくありません。誰でもこれを解決するのを手伝ってもらえますか?

public boolean runQueries(String query){
    if (getConn() != null && query != null) {
        Statement statement = null;
        try {
            long start = System.currentTimeMillis();
            try {
                if(log.isLoggable(Level.FINEST)){
                    log.finest("Processing: "+query);
                }
                statement = getConn().createStatement();
                statement.executeUpdate(query);
            } catch (Exception e) {
                if(log.isLoggable(Level.FINEST)){
                    log.log(Level.SEVERE, "Failed to process        query: "
                        + query, e);
                }else{
                    String reportQuery = query.length() > MAX_CHARS_DISPLAY ? query.substring(0,MAX_CHARS_DISPLAY)+"..." : query;
                        log.log(Level.SEVERE, "Failed to process query: "
                                + reportQuery , e);
                }
            }finally{
                if(statement != null){
                    try {
                        statement.close();
                    } catch (SQLException e) {
                        log.log(Level.SEVERE,"Failed to close statement: ",e);
                    }
                }
            }

            long end = System.currentTimeMillis();

            return true;
        }finally{
            if(statement != null){
                try {
                    statement.close();
                } catch (SQLException e) {
                    log.log(Level.SEVERE,"Failed to close statement: ",e);
                }
            }
        }
    }
    return false;
}
4

1 に答える 1

1

FAQでは、JDBC URL の maxStatements に低い値を設定して、ステートメント キャッシュのサイズを変更する方法について説明しています。非常に大きなステートメントを作成している場合は、その制限をデフォルトの 500 よりもはるかに低く設定することをお勧めします。また、その他のメモリ設定を確認することもできます。

于 2012-06-02T02:39:25.080 に答える