ホームページ > バックエンド開発 > C++ > C#でビットマップの初期化によってロックされたファイルのロックを解除する方法は?

C#でビットマップの初期化によってロックされたファイルのロックを解除する方法は?

DDD
リリース: 2025-01-13 22:57:42
オリジナル
786 人が閲覧しました

How to Unlock a File Locked by Bitmap Initialization in C#?

ビットマップ読み込み中の 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート