我在asp.net 2.0上有一個很大的web應用程序。 Usere open object editor there and make some changes。他們不能一次打開同一個對象。睡眠等待命令塊其他事務
當他們按「保存」btn後,所有更改過程通過回發保存在服務器上。
我正在使用交易保存。在保存操作確定之前,有很多程序,檢查和其他工作要做。
using (SqlConnection con = .........)
{
SqlTransaction trans = null;
try
{
con.Open();
trans=con.BeginTransaction(IsolationLevel.ReadUncommitted);
........operations.........
trans.Commit();
}
catch (Exception e)
{
try { if (trans != null) trans.Rollback(); }
catch { }
throw new MyException("SQL Exception: " + e.Message, e);
}
finally
{
if (con != null && con.State == ConnectionState.Open) con.Close();
}
}
對我來說這段代碼是相當安全的。
但期刊發生: 從這個web應用程序的一個進程保存在mssql上的操作變成了「正在休眠/等待」。 和其他用戶調用的其他進程被此進程鎖定並組織一個隊列。
其中一人扔超時除外.....但其他人正在等待。
所以,我的問題是:我的代碼有一些不好的操作,允許命令成爲睡眠/等待? 可能會有一些技巧?
您明顯遺漏了縮短代碼示例的代碼,因此可能是因爲這樣,但我沒有看到反式代碼。Commit()在你的代碼中的任何地方調用? – jvanrhyn 2010-12-06 12:49:29
因爲我有....... – cyssima 2010-12-06 12:56:51