왜 결과 아래의 코드 :.NET async가 파일 복사를 기다리는 이유는 동기 File.Copy() 호출보다 CPU 사용량이 훨씬 많기 때문입니까?
public static class Program
{
public static void Main(params string[] args)
{
var sourceFileName = @"C:\Users\ehoua\Desktop\Stuff\800MFile.exe";
var destinationFileName = sourceFileName + ".bak";
FileCopyAsync(sourceFileName, destinationFileName);
// The line below is actually faster and a lot less CPU-consuming
// File.Copy(sourceFileName, destinationFileName, true);
Console.ReadKey();
}
public static async void FileCopyAsync(string sourceFileName, string destinationFileName, int bufferSize = 0x1000, CancellationToken cancellationToken = default(CancellationToken))
{
using (var sourceFile = File.OpenRead(sourceFileName))
{
using (var destinationFile = File.OpenWrite(destinationFileName))
{
Console.WriteLine($"Copying {sourceFileName} to {destinationFileName}...");
await sourceFile.CopyToAsync(destinationFile, bufferSize, cancellationToken);
Console.WriteLine("Done");
}
}
}
}
File.Copy() 상태 :
그래서 거기 여전히 : https://msdn.microsoft.com/en-us/library/system.io.file.copy(v=vs.110).aspx이 훨씬 덜 CPU가 걸린다 비동기/파일 복사 목적을 기다리는 진정한 관심사?
가치가 있을지 모르지만 File.Copy 창 기능이 CPU % 측면에서 전투에서 승리하는 것으로 보입니다. 어떤 사람들은 그것이 실제 DMA 지원으로인데도 논쟁 하겠지만, 여전히 나는 공연을 망치기 위해 무엇을하고 있는가? 아니면 비동기 메서드로 CPU 사용을 향상시키기 위해 수행 할 수있는 작업이 있습니까?
더 빠르지 만? – Steve
@Steve 많이 빠르지는 않지만, 나는 여전히 CPU가 걱정하고 있습니다. 무서운 것 같습니다. – Ehouarn
아마도'File.Copy'가 구현 된 방식과'File.OpenRead'와'File.OpenWrite'를 사용하는 직접적인 스트림 기반 접근 방식의 차이점과 관련이 있습니다. 싱크 대 비동기와 관련이 있는지 의심 스럽다. – Abion47