none
關於transaction記憶體釋放的問題 RRS feed

  • 問題

  • 各位大大好~~

    如果都沒有將  transaction = null

    transaction = connection.BeginTransaction();一份

    以下程式會不會使用了三份記憶體空間,

    Code Snippet

     SqlConnection connection = new SqlConnection(connectionString);  
            connection.Open();
            SqlCommand command = connection.CreateCommand();
            SqlTransaction transaction;

    transaction = connection.BeginTransaction();

    ...

    ...
      transaction.Commit();

    transaction = connection.BeginTransaction();

    ...

    ...
      transaction.Commit();

    transaction = connection.BeginTransaction();

    ...

    ...
      transaction.Commit();

     

     

    如果要測使用的記憶體空間,可以怎麼測試呢

    謝謝大大解惑~~

    2007年7月5日 上午 03:24

解答

  • 理論上,在一個交易 Commit 之後,就不會再佔用記憶體空間,所以你的問題不存在。

    除非你用的是巢狀交易(Nested Transaction)才會有佔用數份記憶體的可能。

    不過 BeginTransaction 也只是通知 SQL Server 一個交易開始了,在應用程式部份佔用記憶體量應該是很小的。

     

    若要測試 .NET Framework 應用程式的記憶體使用狀況,可以考慮使用 CLR Profiler (要去微軟網站下載)

    2007年7月5日 上午 03:31
    版主

所有回覆

  • 理論上,在一個交易 Commit 之後,就不會再佔用記憶體空間,所以你的問題不存在。

    除非你用的是巢狀交易(Nested Transaction)才會有佔用數份記憶體的可能。

    不過 BeginTransaction 也只是通知 SQL Server 一個交易開始了,在應用程式部份佔用記憶體量應該是很小的。

     

    若要測試 .NET Framework 應用程式的記憶體使用狀況,可以考慮使用 CLR Profiler (要去微軟網站下載)

    2007年7月5日 上午 03:31
    版主
  • 請教大大

    BeginTransaction 也只是通知 SQL Server 一個交易開始了

      那command.Transaction = transaction;的用意是告訴conn,

    command.ExecuteNonQuery();是交易的一部分嗎

     

    謝謝大大解惑

    2007年7月5日 上午 03:38
  • 沒錯。

     

    不過因為連線已經進入交易程序,所以在這個連線上的 Command 都必須要設定 Transaction,

    否則會彈出錯誤:Command 的 Transaction 屬性尚未初始化。

    2007年7月5日 上午 03:44
    版主
  • 大大好~~

     

    所以說其實trancaction以conn為主體(以前一直以為trancaction是一個主體)

    而trancaction只是將command連接起來的一個橋樑?

     

    謝謝大大解惑

    2007年7月5日 上午 03:51
  • 不能這樣說。

    Command.Transaction 只是設定讓 Command 指定在某個 Transaction 中。

    真正的連結是在 Command.Connection。

    2007年7月5日 上午 05:21
    版主