C# 非直瞄性能
日志记录的预期开销应该是多少? 我试过这个例子C# 非直瞄性能,c#,logging,nlog,C#,Logging,Nlog,日志记录的预期开销应该是多少? 我试过这个例子 私人阶级人士 { 私有静态记录器Logger=LogManager.GetCurrentClassLogger(); 公共字符串名称{get;private set;} 公众人物(字符串名称) { 名称=名称; Info(“使用名称{0}创建的新人员”,名称); } } 列表人员=新列表(); 对于(int i=0;i
私人阶级人士
{
私有静态记录器Logger=LogManager.GetCurrentClassLogger();
公共字符串名称{get;private set;}
公众人物(字符串名称)
{
名称=名称;
Info(“使用名称{0}创建的新人员”,名称);
}
}
列表人员=新列表();
对于(int i=0;i
最大测试值为10050010005000
MAXTEST、noLogging和Logging中的结果
100, 25ms, 186ms
500, 33ms, 812ms
1000, 33ms, 1554ms
5000, 33ms, 7654ms
虽然人们可能永远不会记录这么多的日志,但这是否是人们所期望的性能呢
我还尝试在配置中使用asyncwrapper
您只需将
async
属性添加到目标
元素:
而不是
我想我没有深入到文档中;-)
异步目标包装器允许
记录器代码以更快地执行,
通过对消息进行排队和处理
他们在一个单独的线程。你应该
包装花费大量时间的目标
其Write()方法中的时间量
使用异步目标加速
登录中。因为异步日志记录
这是很常见的情况,NLog
支持的简写符号
将所有目标包装为
异步包装器。只需将async=“true”添加到
中的元素
配置文件。。。你的目标在这里
...
请记住,使用异步日志记录可能会导致某些消息被丢弃。这是
参考: 异步属性和异步包装器 不要将Async属性和AsyncWrapper组合在一起。这只会减慢处理速度,并且行为不可靠 async属性是以下内容的简写:
xsi:type=“AsyncWrapper overflowAction=“Discard”queueLimit=“10000”batchSize=“100”TimeToSleepBetweenBatchs=“50”
对于任何需要丢失此开销并通过代码进行配置的人,默认情况下,您无法将所有目标设置为异步-您必须为每个目标定义:
// Set up asynchronous database logging assuming dbTarget is your existing target
AsyncTargetWrapper asyncWrapper = new AsyncTargetWrapper(dbTarget);
config.AddTarget("async", asyncWrapper);
// Define rules
LoggingRule rule1 = new LoggingRule("*", LogLevel.Trace, asyncWrapper);
config.LoggingRules.Add(rule1);
请注意,默认情况下,如果您排队的日志项目太多,它只会删除项目-查看
OverflowAction=AsyncTargetTrapperOverflowAction.Block
,以返回同步行为。这会产生多大的差异?您可以发布时间以与第一组结果进行比较吗?使用logg时,5000的结果为~44msing.Regard如果您添加
而不是例如
,则您将不再具有异步文件
目标。我已编辑了您的答案以澄清这一点。此答案现在显示了一种不好的做法,如果您同时输入大量消息,则不建议同时使用async=true的AsyncWrapper,默认情况下为NLog async w我将丢弃邮件。简单地说,中详细介绍了防止邮件丢失的正确方法,即使用AsyncWrapper并将overflowAction设置为Block或Grow。这就是我一直在寻找的内容,并感谢对overflowAction的了解。另外,请小心AsyncTargetTrapperOverflowAction。Block
如果您正在备份日志记录,那么它就是您的系统可能已经有压力。强制阻止日志记录将进一步影响您的性能。删除日志消息可能比停止处理请求更好。我正在向目标数据库写入数据。在我的目标部分中,我已将异步标记为真。我还需要编写代码吗要使日志记录异步,请与我的web服务联系,否则framework会处理它?@Sameer您可以这样做。您已经阅读了足够多的文档,并且已经使用了快捷方式async=“true”Wiki: