Yedelkin : "파일이 닫히면 데이터가 자동으로 디스크에 플러시되므로 FileClose() 함수를 호출하기 전에 FileFlush() 함수를 호출할 필요가 없습니다." - 예, sergeev 가 말하는 내용을 이해하기 시작했습니다. FileClose() 대신 파일의 마지막 레코드 보존을 보장하기 위해 FileFlush()를 호출합니까? 그리고 그것이 현명한 결정이 될까요?
2011.05.29 21:58:20 FlushSave (EURGBP,M1) FileFlush. GetTickCount() = 133766 2011.05.29 22:00:33 FlushSave (EURGBP,M1) 파일 닫기. GetTickCount() = 133734 사실, 두 함수 모두 실행하는 데 같은 시간이 걸립니다.
내가 알기로는 이 줄은 오프셋 없이 파일의 시작 부분으로 위치를 이동합니다. 이를 통해 기존 정보를 덮어쓸 수 있습니다(즉, 날짜가 업데이트되지만 파일에 누적되지 않음)
"파일이 닫히면 데이터가 자동으로 디스크에 플러시되므로 FileClose() 함수를 호출하기 전에 FileFlush() 함수를 호출할 필요가 없습니다." - 예, sergeev 가 말하는 내용을 이해하기 시작했습니다. FileClose() 대신 파일의 마지막 레코드 보존을 보장하기 위해 FileFlush()를 호출합니까? 그리고 그것이 현명한 결정이 될까요?
대신이 아니라 필요에 따라.
플러시 - 나머지 데이터를 플러시하고 파일을 닫지 않습니다 . 너가 원하는게 그거야?
닫기 - 나머지 데이터를 디스크로 플러시하고 닫습니다.
대신이 아니라 필요에 따라.
플러시 - 나머지 데이터를 플러시하고 파일을 닫지 않습니다 . 너가 원하는게 그거야?
닫기 - 나머지 데이터를 디스크로 플러시하고 닫습니다.
FileFlush()를 사용하여 시간을 최소화하는 것이 잘 작동하지 않습니다.
2011.05.29 21:58:20 FlushSave (EURGBP,M1) FileFlush. GetTickCount() = 133766
2011.05.29 22:00:33 FlushSave (EURGBP,M1) 파일 닫기. GetTickCount() = 133734
사실, 두 함수 모두 실행하는 데 같은 시간이 걸립니다.
내가 알기로는 이 줄은 오프셋 없이 파일의 시작 부분으로 위치를 이동합니다. 이를 통해 기존 정보를 덮어쓸 수 있습니다(즉, 날짜가 업데이트되지만 파일에 누적되지 않음)
이 때 SEEK_SET 대신 파일의 끝으로 트랜지션을 사용하면 파일에 데이터가 누적된다.
플러시할 때마다 새 파일 핸들을 엽니다. 무엇 때문에? 그리고 닫지 마세요.
FileFlush 기능의 장점은 핸들을 다시 열 필요가 없다는 것입니다.
1. 내가 알기로는 이 줄은 오프셋 없이 파일의 위치를 이동합니다. 기존 정보를 덮어쓸 수 있는 항목(예: 날짜가 업데이트되었지만 파일에 누적되지 않음)
이 때 SEEK_SET 대신 파일의 끝으로 트랜지션을 사용하면 파일에 데이터가 누적된다.플러시할 때마다 새 파일 핸들을 엽니다. 무엇 때문에? 그리고 닫지 마세요.
FileFlush 기능의 장점은 핸들을 다시 열 필요가 없다는 것입니다.
다음과 같이 했습니다.
결과:
2011.05.29 23:14:31 FlushSave (EURGBP,M1) FileFlush. GetTickCount() = 13563
2011.05.29 23:14:32 FlushSave (EURGBP,M1) 파일 닫기. GetTickCount() = 531
동시에 문서에 따라 줄을 바꿨습니다.
그러나 아직 FileWrite() 전에 FileFlush()를 호출하는 요점을 파악하지 못했습니다.다음과 같이 했습니다.
결과:
2011.05.29 23:14:31 FlushSave (EURGBP,M1) FileFlush. GetTickCount() = 13563
2011.05.29 23:14:32 FlushSave (EURGBP,M1) 파일 닫기. GetTickCount() = 531
동시에 문서에 따라 줄을 바꿨습니다.
그러나 아직 FileWrite() 전에 FileFlush()를 호출하는 요점을 파악하지 못했습니다.다음은 옵션입니다.
결과는 FileFlush입니다. GetTickCount() = 26125
다음은 옵션입니다.
결과는 파일 닫기입니다. GetTickCount() = 3969이 옵션은 47에서 110 사이의 결과를 제공했습니다.
1. 결론 - 루프에서 FileFlush를 사용하면 실행 속도가 약 260배 느려집니다.
2. 이러한 변형의 50000개 레코드에 대한 주기의 결과는 FileFlush입니다. GetTickCount() = 1891
3. 50,000개 항목에 대한 루프를 실행할 때 파일 쓰기를 완료하지 않고 터미널을 종료할 수 없었습니다(터미널을 닫고 프로세스를 "종료"했습니다).
4. 100000개 레코드의 루프로 터미널을 종료할 수 있었지만 파일에는 65536개 이상의 레코드가 있었습니다(드레인은 Excel 2003에 배치됨).
동시에 문서에 따라 줄을 바꿨습니다.
이것은 문서의 어디에 기록되어 있습니까?
그것이 없는 것의 의미를 어떻게 이해할 수 있습니까? 라인의 순서를 고국으로 되돌리고 다시 확인하십시오. 분명히 문서가 정확하지 않습니다.
하지만... 테스트 덕분에 오류가 발견된 것 같습니다. FileFlush 는 변경 사항이 없는 상태에서 허용할 수 없을 정도로 오랜 시간을 소비합니다.흥미로운 :
어머나! 결론은 일반적으로 광기입니다. 이것은 "OOP가 더 빠름" 또는 "지표가 느립니다. 모든 코드를 전문가 고문에게 전송해야 합니다"와 같은 응용 프로그램이 나중에 나타나는 방식입니다.
전문가, 이 기능을 올바르게 사용하는 방법을 작성하십시오.
다음과 같이 가정합니다.
저것들. FileClose -- FileOpen 바인딩을 FileFlush 와 비교하는 것이 옳습니다.
이론적으로 FileFlush는 FileClose의 필수적인 부분이어야 하며 번들보다 느릴 수 없습니다.
변경 사항이 나타나기 전에 깜박이는 것은 의미가 없습니다. 그들은 아직 존재하지 않습니다 :)
그러나 거친 결론에도 불구하고 테스트는 여전히 지시적이므로 변경 사항이 없을 때 기능이 어떻게 작동하는지에 대한 개발자의 의견을 기다리고 있습니다.