如何发现交易是否经常中止?

时间:2015-11-11 23:40:08

标签: haskell ghc stm

我正在尝试调试使用STM的程序。 ThreadScope读数指出了一个非常高的CPU活动,你可以在这里看到:

enter image description here

所以我试图找出是否由于经常中止的交易而发生这种情况。我认为第一件事是用这样的东西来测试:

atomically $ do
  someWork 
  ...
`orElse` do
  unsafeIOToSTM $ traceEventIO "transaction aborted!"
  retry

但我不确定这是否正确,或者这是否是在STM方案中调试的最佳方法。有什么想法吗?

1 个答案:

答案 0 :(得分:3)

使用stm-stats包。它提供的trackSTM代替atomically代替dumpSTMStats :: IO ()STM transaction statistics (2011-10-09 12:28:37.188951 UTC): Transaction Commits Retries Ratio _anonymous_ 1 0 0.00 reader 1 23 23.00 writer 23 0 0.00 提供类似这样的内容:

      while (dbReader.Read())
            {
                aMember = new Member(dbReader["FirstName"].ToString(),                 dbReader["LastName"].ToString());
                this.lstbxNames.Items.Add(aMember);

            }
            dbReader.Close();
            dbConn.Close();
        }



   using System;
   using System.Collections.Generic;
   using System.Linq;
   using System.Text;

 namespace Final_Project
{
     class Member
     {
    private string firstname;
    private string lastname;
    private string currentbalance;

    public Member()
    {

    }

    public Member(string lname)
    {
        string LastName = lname;
    }

    public string FirstName
    {
        get { return firstname; }
        set { firstname = value; }
    }

    public string LastName
    {
        get { return lastname; }
        set { lastname = value; }
    }

    public string CurrentBalance
    {
        get { return currentbalance; }
        set { currentbalance = value; }
    }
}

(交易名称将自动生成,但有帮助者可以自行设置。)