2012-10-26 72 views
1

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

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

任何帮助将非常感激。

回答

1
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);  

} 
+0

这有错误的类型,不会编译。 – 2012-10-26 22:11:08

+0

我只是在这里输入它没有测试,应该给一个方向 – Anri

+0

非常感谢。我修改了代码,以便及时计算延迟并将其传递给thread.sleep方法,该方法允许我精确地在所需的毫秒级内休眠。谢谢你的帮助。 –

0

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

+0

感谢您的回答。第一个选项是输入。睡眠时间不会作为输入。文本文件每行中的字符串长度都是特定的格式。它不能被改变或控制。我必须控制字符串写入文件的速率。 –

+0

那么使用睡眠是正确的方法。 – evanmcdonnal

2

如果你只能在一分钟内生成25MB,并且它只是随机字符串,那么你还有别的想法 - 你应该能够轻松地做到一分之一以上。

但是就控制而言,只有这样我才能想到的是手动让计时器继续运行,并跟踪您写了多少时间,以自动计算您的速率如果有必要,那么一旦你计算出你的速度有多快,你就会适当地睡觉,而不是你想要的速度。

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

+0

感谢乔的答案。问题是我不知道它将运行在哪个机器/配置上,所以我无法对性能做出最佳猜测。这将是另一个根据机器配置制作性能决策引擎的繁琐工作。 –

+0

@ sridam.g然后,这个答案完全是*所需要的:**“自动计算你的速度 - 然后适当地睡觉”**。也就是说,设定了“目标速率”,并且程序通过等待(在繁忙的循环或定时器中)酌情按照时间表尽最大努力。这与游戏限制FPS的方式类似,比如60 /秒。请注意,算法*不知道机器配置 - 只知道*已经花了多少时间写入前一个输出。 – 2012-10-26 22:06:03

+0

你必须自己计算表现,不要假设任何事情。例如,在您的循环中,经过100次左右的迭代后,查看已经过了多长时间。假设100次迭代需要1秒钟,但您希望在一分钟内看到1,000次迭代。那么你的方式太快了,需要在59秒内将剩余时间减少到900次迭代。在下一百次迭代中睡眠50ms,然后看看你在哪里。保持每n次迭代节流。 –

0

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