Почему SqlTransaction выполняется быстро с ado.net используя C #?

#c# #asp.net #ado.net #sqltransaction

#c# #asp.net #ado.net #sqltransaction

Вопрос:

Я работаю над asp.net проект веб-приложения.

Я попробовал ту же операцию с SqlTransaction и без SqlTransaction. Время выполнения кода, который использует SqlTransaction, быстрее, чем тот, который не использует SqlTransaction.

Я хочу знать причину этого, пожалуйста, дайте мне знать, как SqlTransaction влияет на производительность.

Оба кода выполняют одно и то же действие с помощью и с помощью ввода SqlTransaction .

 using (SqlConnection connection = new SqlConnection(connectionString))
{
    connection.Open();

    SqlCommand command = connection.CreateCommand();
    SqlTransaction transaction;

    // Start a local transaction.
    transaction = connection.BeginTransaction("SampleTransaction");

    // Must assign both transaction object and connection 
    // to Command object for a pending local transaction
    command.Connection = connection;
    command.Transaction = transaction;

    try
    {
        command.CommandText =
            "Insert into Region (RegionID, RegionDescription) VALUES (100, 'Description')";
        command.ExecuteNonQuery();
        command.CommandText =
            "Insert into Region (RegionID, RegionDescription) VALUES (101, 'Description')";
        command.ExecuteNonQuery();

        // Attempt to commit the transaction.
        transaction.Commit();
        Console.WriteLine("Both records are written to database.");
    }
    catch (Exception ex)
    {
        Console.WriteLine("Commit Exception Type: {0}", ex.GetType());
        Console.WriteLine("  Message: {0}", ex.Message);

        // Attempt to roll back the transaction. 
        try
        {
            transaction.Rollback();
        }
        catch (Exception ex2)
        {
            // This catch block will handle any errors that may have occurred 
            // on the server that would cause the rollback to fail, such as 
            // a closed connection.
            Console.WriteLine("Rollback Exception Type: {0}", ex2.GetType());
            Console.WriteLine("  Message: {0}", ex2.Message);
        }
    }
}
 

Комментарии:

1. опубликуйте свой код, пожалуйста

2. Я бы сказал, что это зависит от вашего метода тестирования. Простое выполнение одного и того же действия без транзакции только один раз мало что говорит вам о фактической производительности.

3. В рамках одной транзакции я вызываю хранимую процедуру 500 раз.

4. Из памяти с использованием транзакции в ADO. Net просто отправляет вызов «начать транзакцию» в базу данных перед выполнением вашего кода, поэтому я был бы удивлен, если бы это ускорило процесс. Я подозреваю, что либо ваша БД испытывала большую нагрузку при тестировании без транзакции, либо вы допустили ошибку в том, как вы оцениваете это.

5. Я тестировал это несколько раз.