【问题标题】:Generate random text files at a specific speed in C#在 C# 中以特定速度生成随机文本文件
【发布时间】:2012-10-17 04:31:10
【问题描述】:

我创建了一个 C# 控制台应用程序,该应用程序使用随机创建的字符串连续创建文本文件。时间(以分钟为单位)作为应用程序的输入,它运行该分钟数以生成连续的文本文件。我了解生成的数据量会因处理器速度和其他配置而异。我的机器能够在 1 分钟内生成总共 25 mb 的文本格式数据。

现在,我的问题是,如果通过我的代码作为应用程序的另一个输入,我可以控制每分钟生成的数据速率吗?

非常感谢任何帮助。

【问题讨论】:

    标签: c# performance random generator rate


    【解决方案1】:

    是的。你可以做两件事之一;如果你想控制数据的mb,那么让用户传入一个int,你可以用它来控制写入文件的字符串的长度。另一种选择是使用睡眠。你可以让用户传入一个睡眠值,然后你可以在每次写入之间睡眠这段时间。

    【讨论】:

    • 感谢您的回答。第一个选项是输入。睡眠时间不会作为输入给出。文本文件每行中字符串的长度是特定格式的。它无法更改或控制。我必须控制字符串写入文件的速率。
    【解决方案2】:

    如果您在一分钟内只能生成 25MB,而且它只是随机字符串,那么您还有其他事情要考虑 - 您应该可以轻松地在一分钟内完成比这更多的数量级。

    但就控制而言,我能想到的唯一方法是手动保持计时器运行,并跟踪您在多少时间内写了多少,以便在您前进时自动计算您的费率- 一旦你计算出你的行驶速度与你想要行驶的速度,然后在必要时适当地睡觉。

    这并不完美,但您应该能够做出最佳猜测,并根据过去的表现不断调整您的睡眠时间。

    【讨论】:

    • 感谢乔的回答。问题是我不知道它将在哪台机器/配置上运行,所以我无法对性能做出最佳猜测。这将是另一项基于机器配置的性能决策引擎的乏味工作。
    • @sridam.g 那么这个答案正是所需要的:“自动计算你的费率 - 然后适当地睡觉”。也就是说,设置了“目标速率”,并且程序通过适当的等待(在繁忙的循环或计时器中)尽力遵循时间表。这类似于游戏限制 FPS 的方式,比如 60/秒。请注意,算法知道机器配置 - 只知道它花了多长时间来写上一个输出。
    • 您必须自己计算性能,而不是假设任何事情。例如,在您的循环中,经过 100 次左右的迭代后,查看已经过去了多少时间。假设 100 次迭代需要 1 秒,但您希望在一分钟内看到 1,000 次迭代。那么你的速度太快了,需要在剩下的一分钟内在 59 秒内减少到 900 次迭代。在接下来的一百次迭代中,每次迭代之间睡眠 50 毫秒,然后看看你在哪里。继续限制每 n 次迭代。
    【解决方案3】:

    您可以设置一个计时器并每 N 秒创建一个文件。

    【讨论】:

      【解决方案4】:
      var start = DateTime.Now;
      int bytesSaved=0;
      double desiredSpeed = (25*1024*1024)/60;
      
      while(true)
      {
        int latency = bytesSaved/(DateTime.Now-start).TotalSeconds - desiredSpeed;
        if(latency>0) 
          {          
            Thread.Sleep(100);
            continue;
          }
      
        bytesSaved +=SaveDataChunk(latency);     
      
      }
      

      【讨论】:

      • 我只是在这里输入,没有测试,应该给一个方向
      • 非常感谢。我修改了代码以及时计算延迟并将其传递给 thread.sleep 方法,该方法使我能够准确地睡眠所需的毫秒数。感谢您的帮助。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-12
      • 1970-01-01
      • 1970-01-01
      • 2018-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多