10

我在我的代码中直接使用 TelemetryClient (v0.17.0.576),看起来我只能在最后手动调用 Flush 时将数据推送到 Azure,这感觉不对。我在这里错过了什么吗?

var configuration = TelemetryConfiguration.CreateDefault();
configuration.InstrumentationKey = "KEY";
var client = new TelemetryClient(configuration);

for (int i = 0; i < 10; i++)
{
   log.Information("Loop: {0} {1}", i, value);

   client.Track(new TraceTelemetry(value));
}
client.Flush();
4

4 回答 4

10

出于性能原因,Application Insights SDK 对遥测数据进行批处理并以块的形式发送。要查看实际情况,您可以将 Flush 调用替换为对 Thread.Sleep (70000) 的调用,一旦应用终止,您将看到仪器上传到 AI。

于 2015-06-19T00:49:34.307 回答
1

添加到马里奥赫沃特的答案。如果您使用持久性通道

TelemetryConfiguration.Active.TelemetryChannel = new PersistenceChannel();

Flush()是同步的(所以你不需要让线程休眠一段时间)。如果无法联系 Application Insights,它还具有将遥测数据保存到本地文件的好处,然后在下次Flush()调用时通过良好的连接发送该文件。

于 2016-03-10T17:58:39.453 回答
0

Thread.sleep(30000) 对我有用,但 flush 在应用程序中不起作用。我想使用 Flush() 方法,因为我的应用程序无法睡眠 30 秒。Flush() 方法是否与特定版本有关,或者我缺少其他东西?

我有控制台应用程序,它调用另一个控制台库,它将进一步调用另一个具有遥测类的控制台库(即控制台应用程序-> DLL-> DLL(具有遥测实现))。

于 2018-08-20T08:31:01.177 回答
0

不需要刷新数据 - 除非应用程序在发送最后一个跟踪后直接结束。不幸的是,Flush 还不够,它不会阻塞(*)。所以建议同时进行冲洗和五秒钟的等待。

(*) https://github.com/microsoft/ApplicationInsights-dotnet/issues/407

于 2021-06-07T13:32:44.077 回答