针对ADO.Net的C#数据访问跟踪 - 需要执行分析器检查多线程之间共享的连接是什么
我试图使用ETW启用数据访问跟踪,如this article中所述。针对ADO.Net的C#数据访问跟踪 - 需要执行分析器检查多线程之间共享的连接是什么
要验证它是否跟踪事件,我创建了一个简单的控制台应用程序,而不是MVC应用程序,因为它在文章中。代码如下,它打算抛出,所以我可以验证跟踪工作。
var connectionString = "Data Source=local;Trusted_Connection = True; Initial Catalog = Data; Timeout = 2; Max Pool Size = 4";
using (var conn = new SqlConnection(connectionString))
{
using (var command = new SqlCommand("SELECT * FROM DATA", conn))
{
conn.Open();
var reader = command.ExecuteReader();
using (var data = new SqlCommand("SELECT * FROM PEOPLE", conn))
{
var reader1 = command.ExecuteReader();
}
}
}
我正在使用.Net Framework v4.0.30319。 理想情况下,我想跟踪线程之间共享的连接对象。任何帮助将非常感激!
感谢
TL; DR尝试注册其他的.dll/MOF对而不是在导游推荐的一个。
手动注册DLL的步骤
- (从this MS导经修饰的)添加以下注册表项
HKEY_LOCAL_MACHINE \ SOFTWARE \微软\ BidInterface \装载机
- 创建一个新的字符串值(注意键中的':')和修改...它
值名称 = “:路径”
值数据 = “C:\ WINDOWS \ Microsoft.NET \ Framework64 \ v4.0.30319 \ AdoNetDiag.dll”
- 使用mofcomp.exe注册ETW提供程序(使用Windows安装)
mofcomp.exe C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ adonetdiag.mof
测试:
logman start test -p "System.Data.1" -o test.etl -ets // Start a trace
// Do things with ADO.NET (run your sample)
logman stop test -ets // Stop a started trace
tracerpt.exe test.etl -of CSV -o dump.csv // make it human readable
如果事情的来龙去脉,你现在应该有充满的相同目录下的summary.txt和dump.csv文件跟踪信息。祝你好运。
哪个ADONETDIAG.dll
你注册了那些步骤?我遵循these(他们似乎是微软公布的,其他人用它们作为指南),并发现它们只能用于一个问题。
我发现的一个问题是,您的机器上可能安装了ADONETDIAG.dll
的多个副本 - 并且您注册的DLL文件有!例如,我的机器已经安装在下列地点之一
- C:\ WINDOWS \ Microsoft.NET \ Framework64 \ V2.0.50727 \ AdoNetDiag.dll
- C:\ WINDOWS \ Microsoft.NET \ Framework64 \ v4.0.30319 \ AdoNetDiag.dll
- C:\ WINDOWS \ Microsoft.NET \框架\ V2.0.50727 \ AdoNetDiag.dll
- C:\ WINDOWS \ Microsoft.NET \框架\ v4.0.30319 \ AdoNetDiag.dll
所有的步骤,我直接找到你于r例如\Framework\v2.0.50727\AdoNetDiag.dll
。当我尝试这个时,我没有得到任何日志(我的.etl文件捕获1事件,跟踪开始,并且永远不会超过8KB)。
试验和错误导致发现\Framework64\v4.0.30319\AdoNetDiag.dll
为我工作。
[注册的MOF](https://msdn.microsoft.com/en-us/library/cc765421.aspx),用[Perview](https://*.com/a/46022660/1466046) - > Collect-> provider-browser并添加ADO.net和SQL的所有内容,点击开始并运行你的代码。在代码运行后,转到perfview并停止日志记录并查找ADO/SQL事件 – magicandre1981