2012-10-26 1 views
1

무작위로 생성 된 문자열로 텍스트 파일을 연속적으로 만드는 C# 콘솔 앱을 만들었습니다. 시간 (분)은 앱에 대한 입력으로 주어지며 연속 텍스트 파일을 생성하기 위해 해당 시간 (분) 동안 실행됩니다. 생성 된 데이터의 양은 프로세서 속도 및 기타 구성에 따라 달라질 수 있음을 이해합니다. 내 컴퓨터는 1 분 안에 총 25MB의 데이터를 텍스트 형식으로 생성 할 수 있습니다.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

이것은 유형에 오류가있어서 컴파일되지 않습니다. –

+0

방금 ​​테스트없이 입력 했으므로 방향을 알려 주어야합니다 – Anri

+0

정말 고마워요. 지연 시간을 계산하도록 코드를 수정하고이를 thread.sleep 메소드에 전달하여 필요한 밀리 초 동안 정확하게 잠자기하도록했습니다. 당신의 도움을 주셔서 감사합니다. –

0

예. 당신은 두 가지 중 하나를 할 수 있습니다. 데이터의 MB를 제어하려면 사용자가 파일에 기록 된 문자열의 길이를 제어하는 ​​데 사용하는 int를 전달하게하십시오. 또 다른 옵션은 잠을 사용하는 것입니다. 사용자가 수면 값을 전달하게하고 각 쓰기 사이에 그 시간 동안 잠을 잘 수 있습니다.

+0

답변 해 주셔서 감사합니다. 첫 번째 옵션은 입력입니다. 수면 시간은 입력으로 주어지지 않습니다. 텍스트 파일의 각 행에있는 문자열의 길이는 특정 형식입니다. 그것은 변경되거나 통제 될 수 없다. 문자열이 파일에 기록되는 속도를 제어해야합니다. –

+0

그런 다음 수면을 사용하는 것이 올바른 방법입니다. – evanmcdonnal

2

분당 25MB 만 생성 할 수 있고 임의의 문자열 일 경우 생각할 사항이 있습니다. 1 분 이내에 그 이상의 주문을 쉽게 할 수 있어야합니다 .

그러나 내가 제어 할 수있는 유일한 방법은 타이머를 수동으로 실행하고 얼마나 많은 시간을 기록하는지 추적하고 자동으로 요금을 계산하는 것입니다. 계속 - 필요하다면 당신이 얼마나 빨리 가고 있는지, 얼마나 빨리 가고 싶은지를 계산하면 적절히 자면됩니다.

완벽하지는 않지만 최선의 추측을 할 수 있어야하며 과거 실적을 기준으로 계속해서 수면 시간을 조정할 수 있어야합니다.

+0

답변을 주신 Joe에게 감사드립니다. 문제는 내가 어떤 기계/구성이 실행될 지 모르기 때문에 성능을 가장 잘 추측 할 수 없다는 것입니다. 이는 기계 구성을 기반으로 성능 결정 엔진을 만드는 또 다른 지루한 작업입니다. –

+0

@ sridam.g 그러면이 대답은 * 정확히 * 필요한 것입니다. ** "당신이가는대로 당신의 속도를 자동으로 계산 한 다음, 적절하게 잠을 잘 수 있습니다"**. 즉, "목표 속도"가 설정되고 프로그램은 작업량이 많을 때 (바쁜 루프 또는 타이머에서) 대기하여 일정을 따르도록 최선을 다합니다. 게임에서 FPS가 60/초로 제한되는 것과 비슷합니다. 알고리즘 *은 기계 구성에 대해 알지 못함 - 이전 출력을 쓰는 데 얼마나 오래 걸렸는 지주의하십시오. –

+0

성능을 직접 계산해야합니다. 아무 것도 가정하지 마십시오. 예를 들어, 루프에서 100 회 반복 한 후 얼마의 시간이 경과했는지 확인하십시오. 100 회 반복에 1 초가 걸리지 만 1 분에 1,000 회 반복을보고 싶다고합시다. 그러면 너무 빨라서 나머지 분 동안 59 초 동안 900 회 반복을 조절해야합니다. 다음 백에 대한 각 반복 사이에 50ms 동안 잠을 자고 그때 당신이 어디에 있는지 확인하십시오. 반복 횟수 n 회마다 계속 조절하십시오. –

0

타이머를 설정하고 N 초마다 파일을 만들 수 있습니다.