Socket.Poll 在不同机器上的延迟差异很大

2023-12-26

我继承了一个使用套接字的 .net 2.0 客户端应用程序。服务器在 iSeries 上运行。我的计算机尝试使用客户端应用程序但遇到延迟。在遇到“滞后”的计算机上,我确定 Socket.Poll 方法花费的时间更长。

(我认为)我是这样知道的。

MyApp.WriteLogEntry("CS: START check for readable socket");
start = DateTime.Now;
readable = ControllerSocket.Poll(500, SelectMode.SelectRead);
end = DateTime.Now;
MyApp.WriteLogEntry("CS: END check for readable socket");
elapsed = end.Subtract(start);
MyApp.WriteLogEntry("Elapsed TotalMilliseconds = " + elapsed.TotalMilliseconds.ToString());  

从计算机登录,无延迟

10.04.22.994427|CS: START check for readable socket
10.04.22.997427|CS: END check for readable socket
10.04.22.997427|Elapsed TotalMilliseconds = 1.0001

从有延迟的计算机登录

10.03.30.729816|CS: START check for readable socket
10.03.30.745432|CS: END check for readable socket
10.03.30.745432|Elapsed TotalMilliseconds = 15.6152

两台电脑都是windows 7 64位。一台是磁盘上的新副本(无延迟),另一台计算机是公司映像(延迟)。两台计算机都是千兆以太网。

我已禁用两者上的防火墙,并且它们都运行 Symantec Endpoint 12,配置相同。我已将 SEP 全部删除并得到相同的结果

为什么延迟?注册表设置?忍者小魔怪?

编辑 切换到使用秒表类进行计时

MyApp.WriteLogEntry("CS: START check for readable socket");
stopwatch.Start();
readable = ControllerSocket.Poll(500, SelectMode.SelectRead);
stopwatch.Stop();
MyApp.WriteLogEntry("Elapsed TotalMilliseconds = " + stopwatch.Elapsed.ToString());            
MyApp.WriteLogEntry("CS: END check for readable socket");   

11.27.30.012079|CS: START check for readable socket
11.27.30.013079|Elapsed TotalMilliseconds = 00:00:00.0000696
11.27.30.013079|CS: END check for readable socket

11.28.30.518912|CS: START check for readable socket
11.28.30.534512|Elapsed TotalMilliseconds = 00:00:00.0148936
11.28.30.534512|CS: END check for readable socket

好读:http://randomascii.wordpress.com/2013/07/08/windows-timer-resolution-megawatts-wasted/ http://randomascii.wordpress.com/2013/07/08/windows-timer-resolution-megawatts-wasted/


实际上是“快速”机器出了问题。 Windows 中的计时器具有由时钟中断率决定的分辨率。正确配置的机器每秒滴答 64 次,这使得计时器的精度为 15.625 毫秒。处理器在时钟周期之间的正常状态是断电、停止HLT指令 http://en.wikipedia.org/wiki/HLT。在此期间它当然无法观察到时间的流逝。

您通常可以通过运行来找到导致机器行为异常的程序powercfg.exe /energy来自高级指挥部的报告。这通常可以查明与媒体相关的程序、音频驱动程序或插件通常是罪魁祸首。谷歌的 Chrome 因这样做而臭名昭著,即使在电池供电的设备 http://blog.codinghorror.com/why-does-windows-have-terrible-battery-life/,你可能对电池寿命做的最糟糕的事情。

Socket.Poll() 建议的分辨率当然被大大夸大了,这来自底层select() http://msdn.microsoft.com/en-us/library/windows/desktop/ms740141%28v=vs.85%29.aspx套接字功能。追溯到 20 世纪 80 年代的 Unix,当套接字被发明时,功耗在当时绝对不是一个问题。

This ought这不是什么问题,毕竟没什么可做的,所以花多长时间应该没关系。一般情况下,您不应该使用该方法,而是依赖于 Socket.BeginSend/Receive() 的异步 I/O,非常高效。如果您寻求快速修复,那么您也可以做坏事并重新编程时钟中断率。你必须pinvoketimeBeginPeriod() 函数 http://pinvoke.net/default.aspx/winmm/timeBeginPeriod.html。请求 1 毫秒。当你不再需要它时,pinvoke timeEndPeriod() 。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Socket.Poll 在不同机器上的延迟差异很大 的相关文章

  • 给 MVVM 中的 View 一些命令

    假设我有一些用户控制权 用户控件有一些子窗口 用户控制用户想要关闭某种类型的子窗口 用户控制代码后面有一个方法 public void CloseChildWindows ChildWindowType type 但我无法调用此方法 因为我
  • 加载组件无法正常工作

    我尝试将程序集加载到 C 源代码中 所以我首先编译源文件 private bool testAssemblies String sourceName FileInfo sourceFile new FileInfo sourceName C
  • C# 属性实际上是方法吗?

    到现在为止 我的印象是Properties Methods在 C 中是两个不同的东西 但后来我做了如下的事情 这对我来说是 大开眼界 我本来期待一处房产stringProp和一种方法stringProp但我得到了这个 为什么会发生这样的事
  • 流行的“易失性轮询标志”模式被打破了吗?

    假设我想使用布尔状态标志来进行线程之间的协作取消 我意识到人们最好应该使用CancellationTokenSource反而 这不是这个问题的重点 private volatile bool stopping public void Sta
  • iOS 应用程序和.NET 应用程序之间的通信?

    我有 2 个应用程序 一个是 iOS 应用程序 一个是 NET 应用程序 我希望我的 iOS 应用程序发送一条消息 调用 NET 应用程序的方法 将一些字符串发送到 NET 应用程序以保存到数据库 那么 我的 iOS 应用程序如何与 NET
  • socket.io 切换命名空间

    我目前正在与 socket io 进行简单的聊天 基础知识已经可以工作 但现在我正在尝试实现 2 个不同的命名空间 我希望客户端能够通过单击按钮从一个命名空间 支持聊天 切换到另一个命名空间 朋友聊天 服务器端 default namesp
  • CLR 内部字符串常量吗?

    最近我一直在阅读字符串实习生池的工作原理 然而我一直没能找到这个问题的答案 如果我声明一个常量字符串变量 例如const string STR foo 这是否也会添加到实习生表中 只是为了澄清事情 CLR 不参与字符串驻留 Internin
  • 使用 ServiceStack JsonSerializer 反序列化包含 Dictionary 属性的类型

    下面的代码片段显示了我可以实现此目的的两种方法 第一个是使用MsgPack https github com msgpack msgpack cli第二个测试是使用ServiceStack 的 JSONSerializer https gi
  • 类型与创建 CLR 存储过程不匹配

    我在程序集中有一个如下所示的方法 namespace MyNameSpace public class MyClass Microsoft SqlServer Server SqlProcedure public static void M
  • 如何有条件地调用带有约束的泛型方法? [复制]

    这个问题在这里已经有答案了 Suppose I have an unconstrained generic method that works on all types supporting equality It performs pai
  • UNIX 域 STREAM 和 DATAGRAM 套接字之间的区别?

    这个问题是NOTSTREAM 类型和 DATAGRAM 类型 INTERNET 套接字之间的区别 我知道 STREAM 套接字使用 TCP 数据报套接字使用 UDP 以及所有 TCP UDP 内容 按顺序到达的数据包 ACK NACK 等
  • AutoMapper 无法识别特定于配置文件的前缀

    我正在尝试使用 AutoMapper 从属性名称之前有前缀的类中获取数据 并将其映射到没有这些前缀的第二个类 但是 我不一定希望它always删除该前缀 我只想让它为这个特定的映射执行此操作 我的源类如下所示 public class Ad
  • 使用 Google Calendar API 创建全天活动

    我正在使用 C 和 Google Calendar API 类 CalendarService 和 Event 我想将没有任何日期 全天 的活动上传到 Google 日历 如果我不设置 Event End 属性 则会出现异常 如何将我的活动
  • Azure 应用服务自定义身份验证获取 System.ArgumentNullException:“值不能为空”“参数名称:提供程序”

    我有一个简单的 dot net 移动应用程序 具有自定义身份验证 如下所示 https learn microsoft com en us azure app service mobile app service mobile dotnet
  • 用于检查项目文件中的项目变量和引用路径的 api

    我正在研究一个 net application VS2010 与 x 没有 解和变量号这些解决方案中的项目数量 我需要检查项目属性 特定于一定数量的项目 是否同质 并且检查 验证构建期间的参考路径 有没有一个API是这样的吗 如果没有 我该
  • 获取 WPF 控件的所有附加事件处理程序

    我正在开发一个应用程序 在其中动态分配按钮的事件 现在的问题是 我希望获取按钮单击事件的所有事件 因为我希望删除以前的处理程序 我尝试将事件处理程序设置为 null 如下所示 Button Click null 但是我收到了一个无法分配 n
  • .Net 4.0 应用程序在 64 位上比 32 位慢(分析和可能的解决方案)(应用程序正在使用 NetAdvantage)

    我们已经用 VB NET 4 0 VS2010 编写了 NET 应用程序 并使用设置为调试和发布配置的 AnyCPU 设置的所有项目进行编译 我们注意到 当此应用程序在 64 位环境中运行 在 Windows Server 2003 R2
  • Visual Studio 中的测试单独成功,但一组失败

    当我在 Visual Studio 中单独运行测试时 它们都顺利通过 然而 当我同时运行所有这些时 有些通过 有些失败 我尝试在每个测试方法之间暂停 1 秒 但没有成功 有任何想法吗 在此先感谢您的帮助 你们可能有一些共享数据 检查正在使用
  • .NET中的LinkedList是循环链表吗?

    我需要一个循环链表 所以我想知道是否LinkedList是循环链表吗 每当您想要移动列表中的 下一个 块时 以循环方式使用它的快速解决方案 current current Next current List First 电流在哪里Linke
  • Microsoft SQL 数据库的 WebSocket 侦听器

    我目前正在开发一个项目 该项目必须使用 WebSockets 作为将数据传输到客户端的方式 基础设施看起来像这样 客户端 gt Web 服务器 gt Microsoft SQL 数据库 我想最理想的情况应该是这样的 客户端打开一个到服务器的

随机推荐

  • 使用 ABC 模块时,关键字参数是一个好习惯吗?

    这个问题是后续this one https stackoverflow com a 54694783 10597450 使用时super for 多重继承 https rhettinger wordpress com 2011 05 26
  • cssmin 未正确处理@import

    我在包含 imports 的文件上使用 cssmin cssmin 正确地递归导入本地文件 但对于指向 URL 的导入 导入将保持内联 这使得生成的缩小 CSS 无效 因为 规则必须位于文件的开头 有谁知道这个问题的好的解决方案或解决方法
  • Xcode 问题导航器:两个箭头蓝色图标是什么意思?

    在 Xcode 版本 7 3 1 7D1014 上 在问题导航器中 项目行右侧有一个我无法理解的图标 你知道这是什么意思吗 好吧 这实际上是一个Static Analyzer问题 当项目存在内存管理问题和其他问题时 就会发生这种情况 有关这
  • 提交时的重定向获取后 (PRG) 摘要页面

    因此 我阅读了这种称为 PRG 的方法 作为解决表单双重提交问题的一种方法 但是 我还没有找到向用户显示摘要页面 成功消息的下降实现 我能想到的唯一方法是存储会话变量 但我不希望它在多次刷新时持续存在 它应该显示消息 摘要一次 然后完成 此
  • 用随机字符替换字符串中的每个数字

    我想替换字符串中的每个数字 例如ABC123EFG与另一个随机字符 我的想法是生成一个随机字符串 其中包含所有数字的数量 str并将每个数字替换为 array count of the digit 有没有办法在没有 for 循环的情况下做到
  • 如何获取 3,200 条推文(Twitter API 1.1)

    经过大量的尝试和错误 我终于成功地使用 Twitter 的新 API 版本 1 1 获取推文 我正在使用 PHP TwitterOauth 库 尽管我能够获取推文 但有两件事我不明白 statuses user timeline 的限制是
  • ES5 |何时使用 null 以及何时使用 undefined [重复]

    这个问题在这里已经有答案了 可能的重复 JavaScript null 或未定义 https stackoverflow com questions 6429225 javascript null or undefined null是保留字
  • php 卷曲问题

    我正在尝试使用curl 获取远程文件的信息 问题是其他 Web 服务器位于端口 81 上 正如你所看到的 它不起作用 如果在 URI 中指定端口号会发生什么 我的意思是首先删除CURLOPT PO
  • 如何在 keycloak 中设置 CORS 配置以允许 ajax 请求?

    我正在尝试使用 keycloak 作为身份验证服务器 我尝试通过 ajax 请求获取令牌 它在卷曲中效果很好 但由于 CORS 而在我的角度中效果不佳 我已将客户端设置为 直接访问授予启用 为 true 并且已将 添加到 Web Origi
  • 替换特殊字符的问题

    我在从字符串中删除特殊字符时遇到问题 我使用了以下代码 但是没有作用 请建议我更好的逻辑 NSString trimmedReciString NSString stringName NSCharacterSet myCharSet NSC
  • Farbtastic 颜色选择器需要帮助。包含简单的 html 示例

    我已经包含了一个非常简单的 html 示例 几乎可以工作 这是这个出色的颜色选择器的非常简单的实现 但它并不像广告中所说的那样有效 我只得到一个蓝色盒子 我可以选择蓝色色调 但不是渐变或外环 等待 我刚刚意识到外环在那里 我可以用它改变颜色
  • NodeJS 内存消耗统计问题 - 巨大的 RSS 和外部内存使用情况

    在对 Node 项目进行性能测试时 我遇到了一些内存报告 这些报告在性能和内存泄漏方面的解释有点令人困惑 背景 所以我使用生成的报告进程 内存使用 https nodejs org api process html process proc
  • 如何使用 JQuery Wrapper 添加简单的图像超链接

    我不是编码员 我需要一个简单的解决方案来将 html 文档中的超链接添加到 jQuery 图像 以下内容不起作用 所以我想它比以下内容更复杂 div class slider wrapper div class slider ul clas
  • 如何在 Mongo C# 驱动程序中使用自动增量字段而不使用 eval?

    我正在使用所讨论的自动增量字段here https www tutorialspoint com mongodb mongodb autoincrement sequence htm 我可以在 Mongo Console 中执行这个示例 但
  • 是否可以在没有 GUI 的情况下运行 selenium (Firefox) Web 驱动程序?

    我们正在考虑从 Ubuntu 升级我们的生产服务器 desktop10 04 到 Ubuntu server 12 04 我们当前的桌面操作系统上运行着各种服务 例如 Selenium Web Driver 我的问题是 Selenium W
  • 如何在通知中重新打开活动单击我的android

    我正在开发一个应用程序 用户可以在登录活动中登录 登录用户可以在仪表板活动中查看他们的评论 如果服务器中有任何新评论 它会推送通知 一切都运行完美除了一件事 即当用户单击通知时 如果仪表板活动也位于前面 则每次都会打开一个新的仪表板活动 我
  • 如何确定 zurbs Foundation 的 sass 版本中的间距宽度

    应该比较简单 我无法安静地弄清楚 我有这个 parent include grid row main include grid column 8 sidebar include grid column 4 元素 main 和 sidebar
  • 使用哪种 HTTP 方法下载文件?

    在我的网站中 用户可以下载他们的文件 但文件是使用 PHP 生成的 那么我应该使用什么 HTTP 方法来发送作为文件附件的下载请求呢 获取还是发布 GET 用于被动检索文件 POST 用于altering服务器上的信息 这是从客户端来看的
  • ActiveSupport::MessageVerifier::InvalidSignature

    我正在尝试创建一个表单 用户可以在其中编辑现有视频标题和说明 发送 PATCH 请求时 出现以下错误 StackOverflow 上的另一篇文章说 如果发送字符串而不是对象 则会导致错误 但当我控制台记录它时 我看到一个对象 有什么想法吗
  • Socket.Poll 在不同机器上的延迟差异很大

    我继承了一个使用套接字的 net 2 0 客户端应用程序 服务器在 iSeries 上运行 我的计算机尝试使用客户端应用程序但遇到延迟 在遇到 滞后 的计算机上 我确定 Socket Poll 方法花费的时间更长 我认为 我是这样知道的 M