C# Websocket超过消息大小会导致高CPU使用率

C# Websocket超过消息大小会导致高CPU使用率,c#,owin,cpu-usage,C#,Owin,Cpu Usage,我正在使用库接收Asp.NETWebAPI应用程序的图像流。我使用Owin.websocket.WebSocketConnection创建了一个websocket,以从我的前端接收消息 public class MyWebScoket : WebSocketConnection { protected MyWebScoket(int maxMessageSize = 65536) : base(maxMessageSize) { //logic }

我正在使用库接收Asp.NETWebAPI应用程序的图像流。我使用
Owin.websocket.WebSocketConnection
创建了一个websocket,以从我的前端接收消息

 public class MyWebScoket : WebSocketConnection
 {
    protected MyWebScoket(int maxMessageSize = 65536) : base(maxMessageSize)
    {
       //logic
    }

    public override void OnClose(WebSocketCloseStatus? closeStatus, string closeStatusDescription)
    {
        //logic
    }

    public override Task OnMessageReceived(ArraySegment<byte> message, WebSocketMessageType type)
    {
        //logic
    }

    public override void OnOpen()
    {
        //logic
    }

    public override void OnReceiveError(Exception error)
    {
        //logic
    }
}
公共类MyWebScoket:WebSocketConnection
{
受保护的MyWebScoket(int-maxMessageSize=65536):基本(maxMessageSize)
{
//逻辑
}
公共重写void OnClose(WebSocketCloseStatus?closeStatus,字符串closeStatusDescription)
{
//逻辑
}
公共覆盖任务OnMessageReceived(ArraySegment消息,WebSocketMessageType)
{
//逻辑
}
公共覆盖无效OnOpen()
{
//逻辑
}
公共覆盖无效OnReceiveError(异常错误)
{
//逻辑
}
}
当消息大小低于设置的消息大小时,API的CPU使用率是正常的,并且一切都正常工作,但是当消息大小超过限制时,API的CPU使用率急剧增加,导致我的机器停止响应,即使是鼠标单击

这似乎很奇怪,因为消息发送速率总是相同的

这种行为的原因是什么

我在所有重写的方法中都添加了断点,但没有达到任何断点,我认为如果超过消息限制大小,执行应该转到OnReceiveError


欢迎任何变通方法/想法或替代方案。

我自己在测试时一直在努力解决这个问题,因为我不是专业人士。 看起来,如果您不超过消息大小,owin web套接字将不会太多地使用CPU使用率,而是取决于RAM内存,这样,当不超过时,CPU使用率为2-4%,最高为10%,我的RAM在5-8%之间,最高为13-14%

但是,如果超出该大小,owin web套接字将出现意外行为,导致web套接字使用空闲CPU

我在我的个人电脑上试用了它-i7-7700k 4 cors 8个线程,每个线程都被100%使用,我的内存保持在2-3%左右,每两分钟左右就会跳到10-14%

我不知道这种行为的原因,只知道现在你不应该超过消息的大小,因为这将导致一个非常不可能的行为,我还试图看看是否有人发布了关于它的官方问题

我可以看出(逻辑上)这种行为的一个原因是,当消息超过大小时,owin机械师“担心”RAM内存将不足以运行操作和崩溃,因此它依赖cpu来处理预确定,但这只是我的假设