Somewhere something gets delayed, but I'm not sure where. If you stop RSLinx on your laptop, does it slow down? If so, we can try some debugging.
At line 1000 and 1001 is where the read for the subscription is called and the wait for the response:
TransactionNumber = Me.BeginRead(GroupedSubscriptionReads(key).TagName, GroupedSubscriptionReads(key).NumberToRead)
response = WaitForResponse(TransactionNumber, 750)
After the response comes back, it sends the data back to the subscribers:
If response = 0 Then
SendToSubscriptions(Responses(TransactionNumber And 255))
After that happens, it then sleeps if necessary. So we need to clock each of those actions to see where the delay occurs.
Are you handling the data returned from subscriptions within your own code?
Let's do some benchmarks to see if we can pin this down. Modify the driver code like this:
Dim T1, T2, T3, T4 As Long
'index = 0
For Each key In GroupedSubscriptionReads.Keys
'While index < GroupedSubscriptionReads.Count And Not StopSubscriptions
'* Evenly space out read requests to avoid Send Que Full
DelayBetweenPackets = Convert.ToInt32(Math.Max(1, Math.Floor(m_PollRateOverride / GroupedSubscriptionReads.Count)))
ReadTime.Start()
Try
If Not m_DisableSubscriptions And Not StopSubscriptions Then
TransactionNumber = Me.BeginRead(GroupedSubscriptionReads(key).TagName, GroupedSubscriptionReads(key).NumberToRead)
T1 = ReadTime.ElapsedMilliseconds()
response = WaitForResponse(TransactionNumber, 750)
T2 = ReadTime.ElapsedMilliseconds()
Try
If response = 0 Then
SendToSubscriptions(Responses(TransactionNumber And 255))
T3 = ReadTime.ElapsedMilliseconds()
Else
Them start the application, once it is running put a breakpoint at ReadTime.Reset. After it hits the breakpoint, see what T1, T2, and T3 are.