0

表計算を開始するために実行する次のコードがあります (表計算は、数千行を返すいくつかのクエリを起動します)。アプリが 1 つのインスタンスのみを実行する場合は問題ありませんが、2 つ以上のインスタンスを実行するとサーバーの処理が遅くなり、エラーが発生し始めます。

このコードをスレッドに変換する必要がありますか? それはどのように行われますか?

private static object _lock = new object();

private void RunTable(string outputType, string _outputDataType) {

        Server.ScriptTimeout = 300;

        string returnCode = string.Empty;
        lock (_lock)
        {
            using (SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["MainDll"].ToString()))
            {
                connection.Open();
                using (SqlCommand command = new SqlCommand(sql.ToString(), connection))
                {
                    command.CommandType = CommandType.Text;
                    command.CommandTimeout = 300;
                    returnCode = (string)command.ExecuteScalar();
                    Dispose();
                }
                Dispose();
            }
        }
4

1 に答える 1

1

まず、エラーが表示されている場合は、表示されているエラーをお知らせください。

2 つ目: どのくらいのデータを読み取っていますか (つまり、すべてのデータを RAM にロードできますか)。

3 番目: すべてのデータを一度にロードできない場合は、 を使用しSqlDataReaderてデータベースから継続的に読み取ります。

マルチスレッドに関しては、ボトルネックがどこにあるかによって異なります。ボトルネックがデータベースからの読み取りにある場合、マルチスレッド化してもあまり得られません (特に、データベースが同時アクセスを許可していない場合)。データベースからデータを取得したら、スレッドを使用してデータを処理できますSqlDataReader。これは、レコードごとに読み取るため、スレッドを使用する必要がある場合に特に効果的です。

于 2012-05-23T18:59:32.833 に答える