如何在多线程C#应用中用NLog正确测量操作与指令耗时?
多线程C#应用中NLog日志时间差异常及线程控制问题
我有UNIX服务器编程背景,此前通过添加日志并比对连续日志条目时间差即可简单完成速度分析。但这种方法在我当前基于NLog的多线程C#应用中似乎失效。
测试代码
foreach (var missionpart in mission.missionParts) { _logger.Debug($"GetmissionsTelegram : currently dealing with missionPart with Id=[{missionpart.Id}]"); if (missionpart.ProductId != null) { if (products.Where(o => o.Id == missionpart.ProductId).FirstOrDefault() == null) { add_mission = false; } } _logger.Debug($"GetmissionsTelegram : missionPart with Id=[{missionpart.Id}] is dealt with."); } _logger.Debug($"GetmissionsTelegram : will be added=[{addmission}]");
异常日志片段
... 2024-10-17 16:58:13.2446 | GetJobsTelegram : jobPart with Id=[37370] is dealt with. 2024-10-17 16:58:24.1662 | GetJobsTelegram : currently dealing with jobPart with Id=[37371] ... 2024-10-17 17:02:31.9896 | GetJobsTelegram : jobPart with Id=[37320] is dealt with. 2024-10-17 17:02:44.9066 | GetJobsTelegram : currently dealing with jobPart with Id=[37321] ... 2024-10-17 17:04:44.1077 | GetJobsTelegram : jobPart with Id=[37305] is dealt with. 2024-10-17 17:04:55.9323 | GetJobsTelegram : currently dealing with jobPart with Id=[37306]
从代码逻辑来看,包含“is dealt with”的日志行后应紧跟“currently dealing”或“will be added”日志行,但实际日志显示两者时间差可达9秒以上。我已确认应用确实存在耗时久的问题,怀疑NLog的缓冲机制导致日志时序失真,但尚未找到问题根源。另外,想请教是否能让多线程C#应用在当前任务完成前暂停其他线程?请问下一步该如何处理?
内容的提问来源于stack exchange,提问作者Dominique
相关产品推荐
相关产品推荐

