哈哈,其实也看不出什么,也没法进入内核态,所以下一步只能到网上搜搜看,其实有经验的朋友肯定猜出来了,应该是控制台启用了 快捷编辑窗口,截图如下:
文章插图
快捷编辑窗口 简而言之就是用户可以在控制台上独占这个窗口,编辑一些内容,可一旦被用户独占,那程序侧就没法输出内容到 控制台窗口 上了,只能在 内核态 傻傻等等,这应该就是形成原因,画个图大概就像下面这样 。
文章插图
将信息告诉朋友后,朋友说他用的是 Windows 服务部署,但不管是什么模式部署,注释掉 Console.WriteLine 肯定没错 。
感谢如家的 邓工 提供的禁用 快捷编辑窗口 代码 。#region 关闭控制台 快速编辑模式、插入模式 const int STD_INPUT_HANDLE = -10; const uint ENABLE_QUICK_EDIT_MODE = 0x0040; const uint ENABLE_INSERT_MODE = 0x0020; [DllImport("kernel32.dll", SetLastError = true)] internal static extern IntPtr GetStdHandle(int hConsoleHandle); [DllImport("kernel32.dll", SetLastError = true)] internal static extern bool GetConsoleMode(IntPtr hConsoleHandle, out uint mode); [DllImport("kernel32.dll", SetLastError = true)] internal static extern bool SetConsoleMode(IntPtr hConsoleHandle, uint mode); public static void DisbleQuickEditMode() { IntPtr hStdin = GetStdHandle(STD_INPUT_HANDLE); uint mode; GetConsoleMode(hStdin, out mode); mode &= ~ENABLE_QUICK_EDIT_MODE;//移除快速编辑模式 mode &= ~ENABLE_INSERT_MODE; //移除插入模式 SetConsoleMode(hStdin, mode); } #endregion三:总结这次卡死的事故,主要还是开发人员大量的使用 Console.WriteLine 来输出日志,在某个时刻输出端窗口因为各种原因被他人独占,导致程序侧无法输出内容到窗口而一直被迫等待,之后朋友将日志输出切换到文件模式,问题得以解决 。
其实这个问题很多新手朋友都会犯,特此记录下来 。
【记一次 .NET 某企业OA后端服务 卡死分析】
经验总结扩展阅读
- 奥运会每几年办一次
- 三伏贴只贴一次有效果吗 三伏贴要贴几次才有效果
- 三伏贴只贴中伏末伏有效果吗 三伏贴一次贴几个部位最佳
- 什么笔可以代替白板笔
- 一次性剃须刀哪里可以买到
- 奥运会一年一次吗
- 中国第一次举办奥运会是哪年
- AlexNet-文献阅读笔记
- 一次性口罩气味大是甲醛吗
- 奥运会几年举行一次?