コピー、ファイルを使用せずに、windowsファイルのキャッシュ
-
09-06-2019 - |
質問
誰もが知る方法コピーからファイルのパスを路を抑制するWindowsのファイルシステムのキャッシュ?
典型的な利用のコピーの大ファイルからUSBドライブ、サーバーと全く同じ事を行います。Windowsのようにスワップする場合のファイルは、例えば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.
概要
ありフラグは、createfile() というFILE_FLAG_SEQUENTIAL_SCANる のキャッシュマネージャー そのファイルにアクセス。
閲覧者が潜在的に大きなファイル 順次アクセスが指定可能 このフラグのために増加します。このフラグがなければならないときに便利でいただいた皆さまには、 ファイルを"中心"連 でも時にはスキップ小 範囲はバイトです。
だんに使ったツールESEUTILた。
チェックできるこ ブログ 入力バッファを比較やNonBuffered IO機能から得ESEUTIL.
コピー一部のテキストからのtechnetブログ:
その定義のバッファのI/Oまでの認識性能の問題-ファイルシステムのキャッシュオーバーヘッド。Unbuffered I/Oまたはrawファイルをコピー)が優先させようとする場合、コピーの大ファイルの場所から別の場所にはありませんへのアクセスのソースファイル後のコピーが完了します。このファイルシステムのキャッシュ費用防止のためのファイルシステムのキャッシュから効果的にフラッシュの大ファイルデータです。多くの用途でこれを呼び出しは、createfile()を空の先にファイルを用いてReadFile()およびWriteFile()機能のデータです。は、createfile()には、createfile機能を作成したファイルが開き、ファイルストリームディレクトリに、物理的ディスク、コンソールのバッファ、テープドライブ、通信資源mailslot、または名前付きパイプ.この機能を返します取り扱いへのアクセスに使用できるオブジェクトです。ReadFile()のReadFile機能を読み込みデータファイルから、開始位置でのファイルポインタを示す.利用できる機能の両方の同期、非同期ます。WriteFile()のWriteFile機能に書き込みデータファイルの位置で指定されたファイルポインタです。この機能は設計の同期、非同期動作します。のためのファイルのコピーのネットワークが非常に大き、コピー用の選択肢はESEUTILの一つであるデータベース電提供します。
Eseutilは正しい答えもあるので、Win7/2008R2に利用できます/jスイッチ念のサービスで確張するのも同様の効果が出ます。