Sey*_*emi 3 windows file-io fsutil
这个问题是根据这个主题: 在c#中在几秒钟内创建一个巨大的虚拟文件
我刚刚检查了xp/vista/7中的fsutil.exe,将大量虚拟数据写入存储磁盘,与编程方式相比,编写这么大的文件所需的时间更少.
当我在.net的帮助下尝试做同样的事情时,它将比fsutil.exe花费更多的时间.
注意:我知道.net不使用本机代码,因为我刚刚使用native api检查了这个问题,如下所示:
long int size = DiskFree('L' - 64);
const char* full = "fulldisk.dsk";
__try{
Application->ProcessMessages();
HANDLE hf = CreateFile(full,
GENERIC_WRITE,
0,
0,
CREATE_ALWAYS,
0,
0);
SetFilePointer(hf, size, 0, FILE_BEGIN);
SetEndOfFile(hf);
CloseHandle(hf);
}__finally{
ShowMessage("Finished");
exit(0);
Run Code Online (Sandbox Code Playgroud)
答案和.net结果一样平等.
但是在fsutil.exe的帮助下,它只需要比上面更短的持续时间或.net方法说它快2倍
例如:对于使用.net写入400mb,使用fsutil.exe大约需要大约20秒或更少,大约需要40秒.
那有什么解释吗?或哪个函数fsutil.exe确实使用具有这种显着速度的函数?
我不知道fsutil究竟在做什么,但我知道有两种方法可以编写一个比你上面所做的更快的大文件(或者寻找你想要的长度并写一个零,它具有相同的结果).
这些方法的问题在于它们在您执行写入时将文件归零.
您可以通过以下任一方式避免零填充:
归档时间: |
|
查看次数: |
2042 次 |
最近记录: |