我怎样才能使计算机在c#中落后?创造滞后!

我怎样才能使计算机在c#中落后?创造滞后!,c#,C#,我明白,这是一个奇怪的问题。我还认为这很简单,因为上帝知道我创造了无限循环的一部分 我试图在C#中造成一个轻微的PC延迟-特别是我需要在系统范围内创建一个“震荡鼠标”的情况(不仅仅是沙盒exe) 这个小应用程序不能使计算机崩溃!滞后应能运行2-10秒,然后停止 到目前为止,我所尝试的: -产生大量保存数据的线程(填满内存并导致PF使用,没有真正的延迟) -繁殖成吨的线程(一开始会延迟,但当踏板再次繁殖时就没有了——就像操作系统第二次准备就绪一样) -生成包含多个截图的线程(截图似乎没有延迟) 这

我明白,这是一个奇怪的问题。我还认为这很简单,因为上帝知道我创造了无限循环的一部分

我试图在C#中造成一个轻微的PC延迟-特别是我需要在系统范围内创建一个“震荡鼠标”的情况(不仅仅是沙盒exe)

这个小应用程序不能使计算机崩溃!滞后应能运行2-10秒,然后停止

到目前为止,我所尝试的: -产生大量保存数据的线程(填满内存并导致PF使用,没有真正的延迟)

-繁殖成吨的线程(一开始会延迟,但当踏板再次繁殖时就没有了——就像操作系统第二次准备就绪一样)

-生成包含多个截图的线程(截图似乎没有延迟)

这些都不起作用——有什么想法吗

可选背景故事(可选): 在不泄露任何公司信息的情况下,应用程序的原因是为了掩盖生产环境中滞后的后台流程。我们试图加快应用程序的速度,或者改进计算机,但没有结果。当生产工人将滞后与正在运行的后台应用程序相关联时,就会出现滥用情况。我们的目标是消除这种滞后。。。通过在随机时间创建一个类似的

澄清:
最初的后台应用程序不是自制的(仅供参考),唯一真正的解决方案是购买1000个新盒子。该公司将推出更便宜的“隐藏背景应用程序”解决方案'。我知道…

您可以创建一个具有无限循环的线程,并且每X秒引发一个UI线程捕获的事件。然后,UI线程可以调用thread.Sleep(线程)。请不要这样做。

也就是说,可以通过创建与系统中逻辑处理器内核数量相匹配的多个线程来实现,设置每个线程的处理器亲缘关系,使每个内核都有一个线程,然后让每个线程运行如下代码:

int i = rand();
while (!timeLimitExpired())
{
    i += rand() % i;
}
rand()调用的目的是防止编译器优化意识到循环实际上没有做任何事情,并对其进行优化,而模运算的目的是防止产生溢出(异常)(也可以使用简单除法)


因为我认为您不应该这样做,所以我不会分享关于如何确定处理器内核数量或检测线程相关性的代码。相反,请修复你的应用程序。这很简单,就像在一个紧密循环的中间添加一个睡眠()呼叫。 听起来你好像在尝试做一个定时忙循环。最简单的方法就是通过一个紧密的循环来检查时钟,并在经过一定的时间差时退出

现在,在一台典型的PC上,当这种情况发生时,你可能看不到任何“滞后”。为什么?有几个原因

  • 多个CPU。如果不是在每个CPU上都这样做,那么操作系统就可以使用一个空闲的CPU,而您可能不会注意到其中的差异。为了确保您正在使用每个CPU,我建议创建一个进程,使用CPU关联集或CPU 0运行“CPU eater”,然后为系统的每个CPU创建另一个进程
  • 任务优先事项。一般来说,桌面之类的任务比后台任务的优先级更高。如果你想让你的程序不被它抢先,你需要把它作为一个非常高的优先级
  • 注意:如果您将任务设置为高优先级,然后以某种方式将其设置为在启动或登录时运行,则我不对您对机器造成的任何损坏或您被迫执行的操作系统重新安装负责。此外,长时间占用大量CPU可能会导致带有库存冷却设置的PC过热。这会导致碰撞,有时还会造成永久性损坏


    我想补充一点,虽然我们开发人员不必签署任何道德规范来获得医生、律师和一些工程师必须签署的职业执照,但我们仍然有义务拒绝执行不道德的请求


    既然你说这些是你公司自己的机器,他们希望放慢速度,那是愚蠢的,但不是不道德的。然而,如果这些是客户的机器,那么我就不得不放弃。你的老板不会感谢你(甚至可能解雇你),但如果/当一位客户发现真正发生的事情时,你的公司会彻底被炒鱿鱼。违背主管的意愿,为公司和客户做正确的事情,这就是道德的全部。

    您只需创建一个后台应用程序,以所需的时间间隔随机调用Windows BlockInput API即可。这使得你的应用程序占用的空间尽可能小,防止它占用CPU周期和内存

    更多信息请点击此处:

    也就是说,我同意其他帖子/评论的观点,即这是针对症状,而不是问题

    编辑:代码示例

    using System.Runtime.InteropServices;
    using System.Threading;
    
    namespace LagTimer
    {
        class Program
        {
            [return: MarshalAs(UnmanagedType.Bool)]
            [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
            public static extern bool BlockInput([In, MarshalAs(UnmanagedType.Bool)] bool fBlockIt);
    
            static void Main(string[] args)
            {
                Thread t = new Thread(LagTick);
                t.Start();
    
                while (true) { } // Prevent the app from exiting
            }
    
            static void LagTick()
            {
                while (true)
                {
                    BlockInput(true);
                    System.Threading.Thread.Sleep(250);
                    BlockInput(false);
    
                    // TODO: Randomize time in between ticks
                    Thread.Sleep(100);
    
                    // TODO: Add logic for when to "sputter" the mouse
                }
            }
        }
    }
    
    你绑一根绳子

    Form2 Form = new Form2();
    
    // open form2
    Form.Show();
    

    它将在4分钟左右的时间内延迟。至少我无法访问任务管理器

    对于2属性,将不透明度设置为0%,windowsstate=最小化且不显示在任务栏中

    这是一个例子:

    private void timer1_Tick(object sender, EventArgs e)
    //spam form2. Maybe set timer Interval to 10 or 5.
    {
        Form2 Form = new Form2();
    
        // open form2
        Form.Show();
    }
    

    亲爱的上帝,为什么?你是在训练用户这是正常的?真丢脸!说真的,我有点吃惊。我不给你分数,愿上帝怜悯你的灵魂。等等。。。那么你是想欺骗用户背景延迟不是你的应用程序?因此,我不会问“当后台进程挂起时,我如何才能保持响应的UI或计算机?”而是问“我如何随机锁定计算机,以便没有人质疑挂起的后台进程?”这很好。与其解决真正的问题,不如误导用户,让他们认为问题出在其他地方。“嗯,我想我只需要一台更快的电脑。”
    private void timer1_Tick(object sender, EventArgs e)
    //spam form2. Maybe set timer Interval to 10 or 5.
    {
        Form2 Form = new Form2();
    
        // open form2
        Form.Show();
    }