web-dev-qa-db-ja.com

クリップボードへの大きな画像はコンピュータをフリーズします

だから私はいくつかの高さマップ画像をいじっていて、これを見つけました:

http://upload.wikimedia.org/wikipedia/commons/1/15/Srtm_ramp2.world.21600x10800.jpg

この画像は21600x10800で、ブラウザから[画像のコピー]を右クリックすると(Chromeを使用しています)、フリーズするまでコンピュータの速度が低下します。その後、再起動する必要があります。なぜこれが起こるのか興味があります。これは画像のサイズだと思いますが、保存すると約6MBしかありません。

私もWindows8.1を使用しています

16
Joban Dhillon

「画像のコピー」とは、画像ファイル自体ではなく、生の画像データをクリップボードにコピーすることです。

生の画像データは21600x 10800 x 3(24ビット画像)= 699,840,000バイトのデータになります。これは、ブラウザがクリップボードに突き刺そうとしている約700MBのデータです。

JPEGは、不可逆アルゴリズムを使用して生データを圧縮し、かなり良好な圧縮を得ることができます。したがって、圧縮ファイルはわずか6MBです。

コンピュータの速度が低下する理由は、ブラウザが画像を表示するために使用している少なくとも700MBの画像データと、それを保存するための別の700MB(クリップボードにかかるオーバーヘッドを含む)でメモリがいっぱいになっている可能性があるためです。クリップボードと、画像をクリップボードに保存できる形式に変換するための処理能力はそれほど重要ではありません。

物理的なRAMが4GB以下の場合、両方のメモリ要求を同時に満たそうとして、画像データのコピーによってコンピュータがメモリをスワップファイルにページアウトするように強制される可能性があります。時間。これにより、プログラムとディスクアクセスは、ディスクを使用し、ページアウトされたばかりのデータを使用しようとするため、遅くなります。

つまり、大量のメモリと少しの時間に余裕がない限り、クリップボードを巨大な画像に使用しないでください。

きれいなグラフが好きですか?これは、その画像をChromeにロードし、12GBのRAMを搭載したマシンのクリップボードにコピーするとどうなりますか。

enter image description here

2.8GBのRAMを使用して低い位置から開始し、画像をロードすると最大3.6GB(約700MB)にパンチされ、6.3GBのRAMでクリップボードのスパイクにコピーされます。 4.5っぽいところに落ち着く前に、プログラムとかなり大きな画像の2つのコピーを見ると予想されます。

これは、ピーク時に処理されている3.7 GBの画像データです。これはおそらく初期画像であり、クリップボード用に予約された量であり、おそらくいくつかの変換バッファーです。 RAMが8GB未満のマシンをひざまずくにはこれで十分です。

奇妙なことに、Firefoxで同じことを行うと、画像dataではなく画像fileがコピーされます。 -)恐ろしいメモリサージなし。

21
Mokubai