Я сделал TCP-сервер в C# (как службу Windows), который основан в основном на образце Asynchronous Server Socket code в MSDN. Однако примерно через пару дней он начинает использовать 100% CPU на машине dev и остается там до тех пор, пока я не остановлю и не перезагружу службу. Странно, что он по-прежнему работает правильно, даже когда служба достигает максимального использования ЦП, поэтому функциональность никогда не является проблемой.Как устранить проблему 100% -ного использования ЦП с помощью TCP-сервера?
Я спросил об этом на StackOverflow здесь - http://goo.gl/XB2C5, но, я думаю, не было очевидных проблем с кодом, который я вставил. Я отслеживал количество потоков, которые использует программа, и всегда между 14-17, поэтому я не думаю, что это проблема.
Теперь я немного застрял и не знаю, как устранить эту проблему. Есть ли какие-либо инструменты, которые я мог бы использовать или более диагностический код, который я мог бы добавить, чтобы узнать, что вызывает использование ЦП? Мне просто нужно некоторое руководство по дальнейшему исследованию проблемы.
Любая помощь была бы принята с благодарностью. Благодаря!
Одним из инструментов является Process Monitor. Если вам удастся правильно настроить символы, это может дать довольно много интересной информации о том, что происходит в вашем стеке программы. Если вы никогда раньше не использовали Process Monitor, есть серия видео, объясняющая, как ее использовать: http://technet.microsoft.com/en-us/sysinternals/bb963887.aspx – Giedrius