C# Windows服务与EXE中的C线程池

C# Windows服务与EXE中的C线程池,c#,sockets,threadpool,exe,C#,Sockets,Threadpool,Exe,我有一个窗口服务托管一个TCP/IP连接服务器,处理进出的多个连接 有一种逻辑可以识别socket.BeginAcceptcallback、null数据,当检测到它是一个完整的包时,它将为另一个处理程序引发和事件 对于处理程序部分,有一个生成处理程序的工厂方法。 下面是代码片段 var handler = _handlerFactory.Create(socket, data); ThreadPool.QueueUserWorkItem(state => handler.HandleJso

我有一个窗口服务托管一个TCP/IP连接服务器,处理进出的多个连接

有一种逻辑可以识别socket.BeginAcceptcallback、null数据,当检测到它是一个完整的包时,它将为另一个处理程序引发和事件

对于处理程序部分,有一个生成处理程序的工厂方法。 下面是代码片段

var handler = _handlerFactory.Create(socket, data);
ThreadPool.QueueUserWorkItem(state => handler.HandleJsonData(data));
在窗口服务模式下运行3小时后,服务线程数将突然从40增加到1020++,达到最大线程数,然后服务不再开始响应

但是,如果我使用完全相同的代码,以EXE形式托管服务器,则不会出现问题。 下面是用于在EXE中托管的代码

var hostingServer = new HostingServer();
hostingServer.Start();
以下是用于在Windows服务中运行的宿主代码:

protected override void OnStart(string[] args)
{
    var hostingServer = new HostingServer();
    hostingServer.Start();
}

直到现在,我仍然不明白为什么以EXE格式运行相同的代码没有问题,但在使用窗口服务时却有问题。以前有人遇到过同样的问题吗?

请记住,默认情况下,服务是以机器而不是您的身份运行的。这可能会导致对资源、注册表中配置的内容的各种奇怪行为权限,…谢谢@pm100,我将尝试使用admin帐户运行该服务,并尝试一下。PS:线程数是从资源监视器获取的,当它发生时,线程数将以每秒100+的速度增长。您是弹出不必要的线程还是将它们保留在线程池中???@Blaatz0r我没有弹出任何线程,我将把它留给线程池来处理。