Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 高频通信信号机的性能_C#_Performance_Signalr - Fatal编程技术网

C# 高频通信信号机的性能

C# 高频通信信号机的性能,c#,performance,signalr,C#,Performance,Signalr,我目前正在WPF应用程序中自托管一个SignalR服务器。在这个应用程序中,我需要在客户端上每秒至少调用500次方法。现在,我在每次更改时都在客户端调用该方法。客户端的CPU是非常高的。我正在传输的对象包含大约20个基本属性 我的要求是我不能丢失或跳过任何消息。但是我可以每秒以列表的形式发送通知 我不确定哪一个性能最好:短而快还是长而少。我会在服务器端缓冲信息(只存储更改),然后等待客户端请求新数据。每次客户端请求数据时,服务器都以一个数据包(二进制)的形式发送信息。当客户机处理完数据后,它会请

我目前正在WPF应用程序中自托管一个SignalR服务器。在这个应用程序中,我需要在客户端上每秒至少调用500次方法。现在,我在每次更改时都在客户端调用该方法。客户端的CPU是非常高的。我正在传输的对象包含大约20个基本属性

我的要求是我不能丢失或跳过任何消息。但是我可以每秒以列表的形式发送通知


我不确定哪一个性能最好:短而快还是长而少。

我会在服务器端缓冲信息(只存储更改),然后等待客户端请求新数据。每次客户端请求数据时,服务器都以一个数据包(二进制)的形式发送信息。当客户机处理完数据后,它会请求新的数据。这样可以防止在套接字上写入过多数据,从而使套接字不会阻塞。队列的长度表示客户端的传输/处理。当队列太大(服务器端)时,您的网络速度不够快,或者您的客户端无法处理那么多数据

我在我的软件上使用这种方法,该软件连接到发送机器人角度/位置当前状态的PLC



另一种方法是使用UDP,但它是有损的,因此在您的情况下不是很有用。

您如何处理这些消息?希望您将它们放在客户端的某种队列中,并在后台处理它们?是否所有属性都会更改每个“帧”?@Evk我目前正在客户端直接处理消息。你会建议什么样的队列机制?@JeroenvanLangen,没有“假”通知,这意味着每个对象都有一个或多个更改。但是没有,每个属性都没有改变。我可以手动编写代码来确定服务器端的哪个道具发生了更改。为什么有必要将信息(可能是不稳定的)放在如此高的速率上?我希望我的基于通知的模型能保持100%。我买了关于“实时”的故事。不,我想知道UDP/TCPIP是否是您提到的方法……通知模型的最大问题是,套接字可能会溢出并阻塞。是的。循环传输的另一个问题是轮询死区值的开销。