Tag: 延迟

为什么我在20%繁忙的机器上得到IPC延迟

我在一台拥有10个内核且运行47个ClientApp实例的机器上的IPC出现延迟,这些实例都与MasterApp通信。 我偶尔会遇到严重的延迟。 这是我的日志的一部分。 左边的DateTime是日志DateTime(高性能记录器)。 []中的DateTimes是从MasterApp发送消息的时间。 每条消息都以@结尾。 所以第一条消息仅落后1毫秒,但最后消息落后71毫秒。 任何可能导致这种情况的想法以及我可以做些什么来消除延迟 20141030T120401.015 [——–*MD|USD/JPY 109.032 109.034 1000000.00 1000000.00 20141030T120401014@] 20141030T120401.084 [——–*MD|EUR/CHF 1.20580 1.20588 3000000.00 2000000.00 20141030T120401019@] 20141030T120401.163 [——–*MD|USD/JPY 109.031 109.034 1000000.00 1000000.00 20141030T120401088@*MD|EUR/CHF 1.20580 1.20588 3000000.00 1000000.00 20141030T120401092@] 代码摘录: public void Connect(int port) { IPAddress[] aryLocalAddr = null; String strHostName = “”; try { // NOTE: DNS lookups are […]

C#/ .NET 4.5 – 为什么“等待Task.WhenAny”在WPF应用程序的UI线程中提供Task.Delay时永远不会返回?

鉴于以下代码,为什么Task.WhenAny在提供1秒的Task.Delay时永远不会返回? 从技术上讲,我不确定它是否会在延长的时间后返回,但是在15秒左右之后我不会手动终止该过程。 根据文档,我不需要手动启动delayTask,事实上,如果我尝试手动启动,我会收到exception。 当用户选择WPF应用程序中的上下文菜单项时,将从UI线程调用代码,但如果我为上下文菜单项指定了click方法,则在新线程中运行此代码时,它可以正常工作。 public void ContextMenuItem_Click(object sender, RoutedEventArgs e) { … SomeMethod(); … } public void SomeMethod() { … SomeOtherMethod(); …. } public void SomeOtherMethod() { … TcpClient client = Connect().Result; … } //In case you’re wondering about the override below, these methods are in //different classes i’ve just simplified things here a bit […]

如何定期更新Label控件的值?

我正在尝试让标签显示一些文字,然后片刻之后刷新自己并稍后能够重新显示其他内容。 然而,目前我不知道如何暂停标签(如果可能的话)。 我的代码到目前为止: foreach (var x in mod) { labelWARNING.Visible = true; labelWarningMessage.Text = “This module has a prerequisite module: ” + x; //need a pause here to give user sufficient time to read the above text //labelWarningMessage.Text = “”; }

使用套接字时发送当前值的Unity延迟

Visual Studio中的client.cs。 private void SendToServer(string HeartRate) { SetHRTest(HeartRate); try { s = client.GetStream(); StreamReader sr = new StreamReader(s); StreamWriter sw = new StreamWriter(s); sw.AutoFlush = true; sw.WriteLine(HeartRate); } finally { if(Environment.HasShutdownStarted) { s.Close(); client.Close(); } } } Unity中的server.cs using UnityEngine; using System.Collections; using System.Net.Sockets; using System.IO; using System.Net; using System.Threading; public class Server { public […]

检查条件并调用具有延迟统一周期的连续方法

我想要代码来检查目标是否存活,如果是的话,它会被拍摄。 我想一直检查,并一直拍摄,唯一的问题是可以随时进行检查,但射击必须有每秒限制。 我的意思是你一直在检查目标,但是当你决定射击时,子弹会一个接一个地发射,但会有一些延迟。 而且当你意识到目标已经死亡时,你会同时停止射击。 void Update() { StartCoroutine(Shoot(currentTarget, 1f)); } IEnumerator Shoot(Collider currentTarget, float delayTime) { yield return new WaitForSeconds(delayTime); if (currentTarget != null) { ……. } } 此代码开始拍摄但拍摄之间没有延迟。

如何在C#中获取服务器和客户端之间的延迟?

我正在为我在ActionScript 3中编写的游戏引擎开发C#Server应用程序。我正在使用权威的服务器模型来防止作弊并确保公平游戏。 到目前为止,一切运作良好: 当客户端开始移动时,它会告诉服务器并在本地开始渲染; 然后,服务器告诉其他人客户端X已开始移动,其中包含详细信息,以便他们也可以开始渲染。 当客户端停止移动时,它会告诉服务器,该服务器根据客户端开始移动的时间执行计算,并且客户端呈现滴答延迟并回复所有人,因此他们可以使用正确的值进行更新。 问题是,当我在服务器计算上使用默认的20ms滴答延迟时,当客户端移动相当长的距离时,当它停止时会有明显的向前倾斜。 如果我将延迟略微增加到22ms,在我的本地网络上一切都运行得非常顺利,但在其他地方,倾斜仍然存在。 经过一番实验后,我注意到所需的额外延迟几乎与客户端和服务器之间的延迟有关。 我甚至把它煮成了一个非常好的公式:延迟= 20 +(延迟/ 10)。 那么,我将如何继续获取某个客户端和服务器之间的延迟(我正在使用异步套接字)。 CPU的工作量不能太大,因为没有服务器运行缓慢。 此外,这真的是最好的方式,还是有更有效/更简单的方法来做到这一点?

等待n秒,然后下一行代码没有冻结forms

嗨我想找到一个等待几毫秒的方法,然后再转到下一行代码, 我已经研究过Thread.Sleep,但这会冻结主窗体,我希望它保持活跃状态​​。 我尝试了定时器和秒表,当他们勾选时应该发布到控制台时冻结主表单。 我找不到在我想要的等待中使用task.delay或后台工作者的方法。 伪代码: Wait 2 – 6 seconds Log “waiting” Log “waiting” Log “waiting” Stop Waiting – Run next line of code. 我尝试过的方法只是冻结表单并在之后填充日志,我只想要一个简单的等待方法而不冻结表单而不必处理被调用的事件,这意味着下一行不会运行。 任何帮助都会很棒,因为我还是c#的新手并且它让我有点生气:(

entity frameworkCodeFirst延迟经历

我正在学习entity framework,我目前正面临一个问题,我花了大约10秒钟从数据库中检索数据或更新一行,好像我的代码实际上已经停留了一段时间,即使调试它一切很正常。 除了延迟之外,代码本身实际上按预期工作。 在Google上搜索,我在这里找不到与此问题相关的其他人与entity framework相关的问题。 我想也许这与我的CodeFirstMySQLEntities类构造函数有关,但不确定。 如果有人能为我提供指导,我将不胜感激。 这是主要代码: namespace CodeFirstMySQL { class Program { static void Main(string[] args) { UserRepository userRepository = new UserRepository(); userRepository.Update(“Klein”, “OtherName”); //delay experienced here Console.WriteLine(“done”); Console.ReadLine(); } } } 这是DbContext代码: namespace CodeFirstMySQL.Database { public class CodeFirstMySQLEntities : DbContext { public CodeFirstMySQLEntities() : base(“CodeFirstMySQLEntities”) { } public DbSet Users { get; […]

在.NET应用程序中需要微秒延迟来限制UDP多播传输速率

我正在C#中编写UDP多播客户端/服务器对,我需要50-100μsec(微秒)的延迟来限制服务器传输速率。 这有助于避免重大数据包丢失,还有助于防止磁盘I / O绑定的客户端过载。 请不要建议Thread.Sleep或Thread.SpinWait。 我不会问我是否需要其中任何一个。 我的第一个想法是使用某种高性能的计数器并做一个简单的while()循环来检查已用时间,但我想避免这种情况,因为它感觉很笨拙。 那不会也会占用服务器进程的CPU利用率吗? 跨平台解决方案的奖励积分,即不是Windows特定的。 先谢谢你,伙计们!

如何在不使用睡眠的情况下在C#中执行短暂延迟?

我对编程非常陌生,到目前为止,我一直学得很好,我想,但我仍然无法理解按照我想要的方式做出延迟的想法。 我正在研究的是使用涉及战斗系统的Windows表单应用程序的一种测试“游戏”。 在其中,我想让NPC每隔几秒钟做一次动作。 问题是,我还想让玩家在攻击之间进行交互。 Thread.sleep似乎对我不起作用,不仅因为我不知道如何multithreading,而且每当我尝试运行它时,比如说: textBox1.Text += “\r\nThread Sleeps!”; System.Threading.Thread.Sleep(4000); textBox1.Text += “\r\nThread awakens!”; 它似乎坚持先睡觉,然后打印两条线。 我想这就是我现在可以说的全部,但如果那仍然太模糊或冗长,请随时告诉我。 简而言之,在C#中我想在运行之前做出一些延迟,但同时仍然允许用户交互。