任何人知道的一个办法复制一文件从道路的一个路径B和抑制Windows文件系统的高速缓存?
典型的使用是复制的一个很大的文件从一个u盘,或服务于当地机。窗户似乎是要交换的一切出如果文件是很大的,例如2GiB.喜欢例在C#但我猜这将是一个Win32话的某种形式,如果可能的。

有帮助吗?

解决方案

更重要的是,有FILE_FLAG_WRITE_THROUGH和FILE_FLAG_NO_BUFFERING.

MSDN有一个很好的文章,在他们两个: http://support.microsoft.com/kb/99794

其他提示

C#我已经找到的东西,像这样的工作,这可以改变的复制直接目的文件:

    public static byte[] ReadAllBytesUnbuffered(string filePath)
    {
        const FileOptions FileFlagNoBuffering = (FileOptions)0x20000000;
        var fileInfo = new FileInfo(filePath);
        long fileLength = fileInfo.Length;
        int bufferSize = (int)Math.Min(fileLength, int.MaxValue / 2);
        bufferSize += ((bufferSize + 1023) & ~1023) - bufferSize;
        using (var stream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.None,
                                           bufferSize, FileFlagNoBuffering | FileOptions.SequentialScan))
        {
            long length = stream.Length;
            if (length > 0x7fffffffL)
            {
                throw new IOException("File too long over 2GB");
            }
            int offset = 0;
            int count = (int)length;
            var buffer = new byte[count];
            while (count > 0)
            {
                int bytesRead = stream.Read(buffer, offset, count);
                if (bytesRead == 0)
                {
                    throw new EndOfStreamException("Read beyond end of file EOF");
                }
                offset += bytesRead;
                count -= bytesRead;
            }
            return buffer;
        }
    }

我不知道,如果这有帮助,但是看一看 增加绩效使用FILE_FLAG_SEQUENTIAL_SCAN.

摘要

有一个标志,用于调用() 叫FILE_FLAG_SEQUENTIAL_SCAN哪 将直接缓经理 访问该文件的顺序。

任何人阅读可能很大的文件 与访问的顺序可以指定 这标志,以提高性能。这个标志是有用的,如果你正在读 文件是"主要"循序, 但是你偶尔会跳过小 范围的字节。

如果你不介意使用的工具,ESEUTIL对我来说真是棒极了.

你可以看看这个 博客 项比较缓和NonBuffered IO职能和从哪里得到ESEUTIL.

复制一些文字从technet博客:

所以看着的定义的缓冲I/O所述,我们可以看看那里感觉到的性能问题的谎言-在缓存文件系统的开销。无缓冲I/O(或原始文件的副本)是首选的时候试图复制一个大型的文件从一个地方到另一个地方当我们这样做不打算访问的源文件之后的复制完成。这将避免文件系统的开销缓和防止文件系统的高速缓存在有效的冲由大型文件的数据。许多应用程序完成这一通过调用调用()创建一个空目标的文件,然后使用ReadFile()写文件和()功能转移数据。调用()-用函数创建或打开文件,文件流、目录、实物盘、体积、控制台缓冲器、磁带驱动器、通信资源,邮筒,或者命名管道。该功能将返回处理可用于访问的对象。ReadFile()-The ReadFile功能读取数据的一个文件,并开始在位置,文件指针指示。你可以使用这个功能对于两个同步和异步行动。写文件()-函数据写的文件指定的位置文件的指针。这一功能设计的同步和异步操作。复制文件的网络,该网络是非常大,我的复制实用工具的选择是ESEUTIL这是一个数据库的实用程序提供与交流。

Eseutil是一个正确的答案,也因为windows7资/2008R2,你可以使用/j的开关在Xcopy,这具有同样的效果。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top