問題タブ [memory-optimization]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
web-applications - 必要な画像のみを webapps にキャッシュする
のヘッドセクションにこれがありindex.php
ます:
そしてこれでcache.manifest
:
しかし、iPhone ユーザーが他に 5 つの役に立たない大きな画像をキャッシュする必要があることは容易に理解できます。
彼が必要とする画像だけをキャッシュするにはどうすればよいですか?
ところで、すべての Apple デバイスで動作するスプラッシュ スクリーン コードが必要な場合は、私のコードが最適です。
android - 2 つのレンダリング スレッド間で OpenGL テクスチャを共有しますか?
GLSurfaceView にレンダリングするインターフェイスがありますが、ある時点で別のレンダリング スレッドを起動して、インターフェイスの一部 (ほんの 2、3 のテクスチャ) をはるかに大きなスケールでレンダリングし、それらをイメージ ファイルとして書き込めるようにします。 SDカードに。ディスクに書き込む目的で別のレンダラーを起動したときに、既に GUI レンダリング スレッドにロードした大きなテクスチャを使用できるかどうか、またどのように使用できるか疑問に思っています。
現在、非常に悪い回避策があります。テクスチャをロードした後、bmp をメモリに保持し、ディスクへの書き込みレンダラーを起動すると、そのビットマップから新しいテクスチャを作成するだけです。しかし、実際にはビットマップが実際には大きなテクスチャとしてロードされた GPU のどこかにあるため、実際には必要ではないと感じた場合、これは時間とメモリの両方を消費します。
android - Android ビットマップ ピクセル - ファイルに直接書き込みますか?
バックグラウンド:
目標は、OpenGL でレンダリングされたデータを使用して、かなり大きな (少なくとも 2048 x 2048 ピクセル) 画像ファイルを書き込むことです。
今日、最初に glReadPixels を使用して、32 ビット (argb8888) のピクセル データを int 配列に取得します。
次に、データを新しい short 配列にコピーし、32 ビットの argb 値を 16 ビット (rgb565) の値に変換します。この時点で、画像を上下逆にし、色の順序を変更して、opengl-image データが Android ビットマップ データと互換性を持つようにします (行の順序とカラー チャネルの順序が異なります)。
最後に、Bitmap() インスタンスと .copyPixelsFromBuffer(Buffer b) を作成して、png ファイルとしてディスクに保存できるようにします。
ただし、一部の電話でメモリ不足によるクラッシュを回避するために、メモリをより効率的に使用したいと考えています。
質問:
int[] -> short[] からの最初の変換を何らかの方法でスキップできますか (そして、ピクセル データの新しい配列の割り当てを回避できますか)? たぶん、バイト配列/バッファを使用して、変換されたピクセルを私が読んだのと同じ配列に書き込んでください...
さらに重要: ビットマップの作成をスキップして (ここでプログラムがクラッシュします)、何らかの方法でデータを作業イメージ ファイルとしてディスクに直接書き込むことができますか (そして、ビットマップ オブジェクトにピクセル データが再度割り当てられるのを回避できますか)。
編集:データをファイルに直接書き込むことができれば、ファイルサイズと後でファイルをメモリに読み込む速度によっては、16ビットピクセルデータに変換する必要がないかもしれません。
nosql - 大規模な Redis ハッシュとソート済みセットのメモリ使用量を最適化する
分散型クローラーの一部として、すべての URL をRedis ソート セットに保存します。これは、クロール キューとRedis ハッシュ(重複を排除し、訪問した URL をマークするため) です。
アクセスしたいさまざまなドメインの URL が 1 ファイルに約 1,100 万個あり、ディスク上の 506 MB のスペースを占有します。
ただし、同じ URL のセットをRedis sorted setに入れると、優先順位が整数 11M から 0 まで減少し、1.759 GB の RAM とRedis ハッシュfrom key: URL-> value: same URL が必要になり、2.048 GB が必要になります。 RAM スペース。
Redis サーバーは、AWS のハイメモリ (17GB) 特大 EC2 インスタンスでホストされています。
Redis でスペースが膨張している原因を突き止めたいのですが、それらを格納する方法が非効率的である可能性がありますか、それともスペースの膨張を避けるために特定の方法でメモリを最適化する必要がありますか? メモリのパフォーマンスを改善するための提案は、gr8 になります。助けてくれてありがとう!
これは redis 情報のダンプです:
c# - 非常に大きなビット配列を効率的に表現するには?
boolean は実際には 1 バイトのスペースを必要とするため、abool[]
はビット配列を表す最もスペース効率の良い方法ではありません。より効率的なビット配列として整数と long が使用されることがありますが、long は 64 ビットしか保持できません。数千万ビットの配列を限られたメモリに格納するためのより効率的な方法はありますか?
この配列で行う必要があるのは、個々のビットを設定/クリアし、一部のビットが 1 か 0 かをチェックすることだけです。つまり、必要な唯一の関数です。
ios - CGContextの可変サイズ
現在、を使用しUIGraphicsBeginImageContext(resultingImageSize);
て画像を作成しています。
しかし、この関数を呼び出すと、の幅が正確にわかりませんresultingImageSize
。
確かに、私は大量のメモリを消費するある種のビデオ処理を開発しました。最初に処理してから描画することはできません。ビデオ処理中に描画する必要があります。
たとえばUIGraphicsBeginImageContext(CGSizeMake(300, 400));
、設定すると、400を超える描画部分が失われます。
では、CGContextの可変サイズを設定したり、メモリ消費が非常に少ないCGContextのサイズを変更したりするソリューションはありますか?
java - Java: 2D float (floats[][]) 配列によるメモリ消費の削減
私は、実際に黒い背景に画像を保持する 2D float 配列 (float[][] 配列) を集中的に操作する Java アプリケーションを持っています。どちらの次元も等しく (正方形)、2 のべき乗 (ほとんどは 256、512、1024) であるため、境界に近い領域はほとんどの場合ゼロになります。
パフォーマンスを向上させ (FFT がいくつかあります)、回転などの配列に対する操作の複雑さを軽減するために、サイズを 2 のべき乗に等しくします。最近、6Gb のマシンでこのアプリケーションのヒープ不足に直面しました。私の計算では、このアプリケーションのメモリ消費量は最大 2 ~ 3Gb である必要がありますが、4 ~ 5Gb に達します (Windows タスク マネージャーで確認)。「YourKit」プロファイラーを使用したところ、これらの float 配列が実際に最も多くのメモリを消費することが示されていますが、これらの float 配列の合計サイズはおよそ 1.3Gb になるはずです (データの保存方法を決定するのは JVM 次第であることはわかっていますが、メモリ消費量が 2 ~ 3 倍になるとは予想していませんでした)。
その場でSnappyコンプレッサーを使用してデータを圧縮/解凍しようとしましたが(メモリ消費量は3.5Gbに低下しました)、パフォーマンスが数回低下し、あまり受け入れられません. また、これらの float[][] を BufferedImage に置き換えたときのパフォーマンスをテストしていましたが、パフォーマンスは非常に悪かったです。
したがって、メモリ消費量を減らすために機能する2つの方法が残っています。1)「ゼロ」要素を節約するために、float [] []配列のラッパーを記述します(「空の」行と列がたくさんあります)2 ) 「2 のべき乗」から離れる
どちらの方法でも、かなりのコーディング/リファクタリングが必要になるため、「あるべきかどうか」を考えている間、この問題についてより良い手がかりがあるかもしれません。
ありがとう!
c - Cで文字列のリストを読み込んで保存するための最もメモリ効率の良い方法
Cで文字列のリストを読み込んで保存する最もメモリ効率の良い方法を知りたい.
各文字列の長さは異なる場合があるため、大きな 2D 配列を事前に割り当てるのは無駄です。また、多くの文字列が存在する可能性があるため、文字列ごとに個別の malloc を回避したいと考えています。
文字列は、私が求めているこのリストのデータ構造に大きなバッファから読み込まれます。
正確に適切なサイズの単一の割り当てで、すべての文字列を個別に格納することは可能ですか?
私が持っている1つのアイデアは、それらをバッファに連続して保存し、バッファ内のさまざまな部分を指すchar *配列を作成することです。これには、区切りのために「\ 0」が含まれます。もっと良い方法があることを願っています。
データ構造と文字列は厳密に読み取り専用になります。