关于WEBAPI 开启后CPU占用居高不下的解决方法
近期做了一个WPF+webapi+selfhost的项目,发现当UI不进行任何操作时CPU占用竟然也高达25%,后台一直在执行这样一个线程:
Thread td = new Thread(new ThreadStart(
() =>
{
Assembly.Load("Hisense Medical QCS, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null");
//HttpSelfHostConfiguration configuration = new HttpSelfHostConfiguration("http://localhost:12340");
HttpSelfHostConfiguration configuration = new HttpSelfHostConfiguration("http://localhost:" + ConfigurationSettings.AppSettings["port"]);
using (HttpSelfHostServer httpServer = new HttpSelfHostServer(configuration))
{
httpServer.Configuration.Routes.MapHttpRoute(
"DefaultApi",
"api/{controller}/{id}/{administrator}",
new { id = RouteParameter.Optional, administrator = RouteParameter.Optional });
httpServer.OpenAsync().Wait();
while (true)
{
}
}
}
));
如果没有while(true)这个死循环,API接口无法被调用,后来在网上找到了解决方法,在死循环中让线程休眠1毫秒就可以了。
Thread td = new Thread(new ThreadStart(
() =>
{
Assembly.Load("Hisense Medical QCS, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null");
//HttpSelfHostConfiguration configuration = new HttpSelfHostConfiguration("http://localhost:12340");
HttpSelfHostConfiguration configuration = new HttpSelfHostConfiguration("http://localhost:" + ConfigurationSettings.AppSettings["port"]);
using (HttpSelfHostServer httpServer = new HttpSelfHostServer(configuration))
{
httpServer.Configuration.Routes.MapHttpRoute(
"DefaultApi",
"api/{controller}/{id}/{administrator}",
new { id = RouteParameter.Optional, administrator = RouteParameter.Optional });
httpServer.OpenAsync().Wait();
while (true)
{
Thread.Sleep(1);
}
}
}
));