我正在尝试调试使用STM的程序。 ThreadScope读数指出了一个非常高的CPU活动,你可以在这里看到:
所以我试图找出是否由于经常中止的交易而发生这种情况。我认为第一件事是用这样的东西来测试:
atomically $ do
someWork
...
`orElse` do
unsafeIOToSTM $ traceEventIO "transaction aborted!"
retry
但我不确定这是否正确,或者这是否是在STM方案中调试的最佳方法。有什么想法吗?
答案 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; }
}
}
(交易名称将自动生成,但有帮助者可以自行设置。)