请求是:使用来自SQL的XEvents API,我必须提取和分析事件日志。我已经个性化了这个会话“QuickSessionTSQL”,使它只记录过程或查询。下面的代码运行得很好,除了一旦它进入第一个foreach块,它就永远不会离开,它只是在等待事件的到来,即使没有其他事件可以触发。它创造了一个无限循环…
如果我执行一个SQL查询,那么它会生成一个事件,foreach将真实的处理该事件。
我试图打破它,但我找不到一个合适的解决方案。
以前有人处理过这个吗?
//Connection string
SqlConnectionStringBuilder csb = new SqlConnectionStringBuilder();
csb.DataSource = @"DESKTOP-85BSKEM\MSSQLSERVER2016";
csb.InitialCatalog = @"master";
csb.IntegratedSecurity = true;
//Session name
string sessionName = "QuickSessionTSQL";
SqlConnection sqlConnection = new SqlConnection(csb.ConnectionString);
SqlStoreConnection connection = new SqlStoreConnection(sqlConnection);
BaseXEStore store = new XEStore(connection);
Session s = store.CreateSession(sessionName);
s.Start();
QueryableXEventData xEvents = new QueryableXEventData(csb.ConnectionString, sessionName, EventStreamSourceOptions.EventStream, EventStreamCacheOptions.DoNotCache);
foreach (var evt in xEvents)
{
foreach (PublishedEventField fld in evt.Fields)
{
string fieldName = fld.Name;
string fieldValue = fld.Value.ToString();
Debug.WriteLine(fieldName + " " + fieldValue);
}
}
1条答案
按热度按时间vzgqcmou1#
为此选择IELTS有一些缺点。它是所有集合的基类型,并使您可以使用LINQ访问流。但要结束有点尴尬。
无论如何,我认为这种模式应该类似于在后台线程上枚举集合,并在希望枚举终止时从前台线程发出信号。就像这样: