都用了行排挤锁了,为什么存储过程没有被执行6000次呢

都用了行排斥锁了,为什么存储过程没有被执行6000次呢?
本帖最后由 fky5050 于 2013-09-23 08:30:53 编辑
--存储过程:
createproc [dbo].[pro_upd_GetPK_Max2]
(
@pKName varchar(32),
@ret int output--动态sql输出参数必须声明
)
as
begin tran
if not exists(select 1 from tPrimarykeys_Max2 where PKName = @pKName)
begin
    ​  declare @error_Msg nvarchar(32)
    ​  set @error_Msg = '列' + @pKName + '不存在'
    ​  rollback tran
    ​  raiserror(@error_Msg, 16, 1)
 end
    ​ select @ret = MaxValue from tPrimarykeys_Max2 with(tablockx) where PKName = @pKName 
    ​ set @ret = @ret + 1
    ​ update tPrimarykeys_Max2 set MaxValue = @ret where PKName = @pKName
commit tran

//==========================多线程执行======================
class Program
    {
        static void Main()
        {
            Console.WriteLine("CallByMultipleThread:start");
            Console.WriteLine("RunByMultipleThread's time:{0}", CallByMultipleThread());

            Console.WriteLine("CallByMultipleThread:end");
            Console.ReadLine();
        }

        //以多线程来运行程序
        static int RunCounts = 20;//指示现在正在运行的线程的个数
        public static long CallByMultipleThread()
        {
            Random rd = new Random();

            Stopwatch CalTimer = new Stopwatch();
            RunCounts = 20;//执行即将执行的线程数
            CalTimer.Start();
            for (int i = 0; i < RunCounts; i++)
            {
                Thread CalThreads = new Thread(new ParameterizedThreadStart(CalSum));
                CalThreads.Priority = ThreadPriority.Highest;
                CalThreads.Start();
            }
            while (RunCounts == 0) ;
            CalTimer.Stop();
            return CalTimer.ElapsedMilliseconds;
        }

        //执行存储过程
        [SqlProcedure]
        public static void CalSum(object n)
        {

            string[] pknames = {"MemberId_Max", "ShopId_Max", "AreaId_Max", "DetailAddressId_Max", "CertificateId_Max", "GoodsId_Max", "GoodsTypeId_Max",
            "OrderId_Max", "OrderDetailId_Max", "DeliveryInfoId_Max", "CommunicationId_Max", "SendDetailId_Max", "EvaluationId_Max", "EvaluationDetailId_Max",
            "QuestionId_Max","ReplyId_Max", "RecommenedShopId_Max","NoticeId_Max","AuthorityId_Max","ErrorLogId_Max"};

            int x = 0;
            string proc = "pro_upd_GetPK_Max2";
            SqlConnection cnn = new SqlConnection("server=KY-PC;Database=Takeout;Persist Security Info=True;User ID=sa;Password=123456;");
            cnn.Open();
            for (int i = 0; i < 300; i++)
            {
                try
                {
                    SqlCommand cmd = new SqlCommand();