ビットマップ読み込み中の C# ファイル ロックの問題を解決する
「別のプロセスによって使用されているため、プロセスはファイルにアクセスできません」というエラー メッセージは、通常、初期化後にビットマップ オブジェクトが画像ファイルのロックを保持している場合に表示されます (pbAvatar.Image = new Bitmap(filePath)
など)。これにより、その後のファイルへのアクセスや変更の試みが防止されます。
解決策は、このロックを解除することです。 非常に効果的な方法には、ビットマップ コンストラクターのファイル ロック メカニズムをバイパスして、ストリームから直接画像をロードすることが含まれます。
<code class="language-csharp">public static Image LoadImageFromStream(string path) { byte[] imageBytes = File.ReadAllBytes(path); using (MemoryStream ms = new MemoryStream(imageBytes)) { Image img = Image.FromStream(ms); return img; } }</code>
この関数は、イメージ ファイルをバイト配列に読み取り、MemoryStream を使用して Image オブジェクトをロードし、ファイル ロックを回避します。 このロードされた画像は、PictureBox (例: pbAvatar.Image = LoadImageFromStream(filePath);
) に割り当てることができます。
パフォーマンスに関する考慮事項
ビットマップ オブジェクトがどうしても必要な場合は、ロードされた画像を効率的に変換できます。
<code class="language-csharp">return (Bitmap)Image.FromStream(ms);</code>
ベンチマークの結果、バイト配列から直接ロードする方が、既存のビットマップからビットマップを作成する (画像あたり約 0.50 ミリ秒) よりもかなり高速 (画像あたり約 0.26 ミリ秒) であることがわかります。 このパフォーマンスの向上は、不必要なイメージ コピーを回避することで実現します。
以上がC#でビットマップの初期化によってロックされたファイルのロックを解除する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。