問題タブ [memory-efficient]

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.

0 投票する
3 に答える
327 参照

javascript - javascript 変数の長さが 2Mb であっても問題ありませんか?

NY Times の最初からすべての記事のリストがあり、外部データベースに接続せずにすべての記事にすぐにアクセスしたいので、私のソリューションはそれを 1 つの変数に保持しています。しかし、それは効率の面で悪い習慣ではありませんか?

0 投票する
3 に答える
270 参照

c# - テンプレート化されたXmlを可能な限り効率的に書き込み、ストリーミングします

Xmlドキュメントを作成するときにメモリを割り当てすぎないようにするための最善の解決策を見つけようとしています。可能な限り少ないリソースでかなり大きなXmlを構築する必要があります(Webサービスは1秒あたり数百の呼び出しを処理できる必要があります)。Xml自体の構造はあまり変わりませんが、データは一貫して変化します。私の現在のソリューションはXDocumentとXElement(LINQ)です。以下は、私が今日行っていることの簡単なサンプルです。

Xmlドキュメントが大きくなりすぎると、XDocumentと何百ものXElementをインスタンス化すると非常にコストがかかり、1秒あたりの呼び出し数が減少します。私は現在、オブジェクトをインスタンス化せずに文字列(XElement)を単純にストリーミングするある種のテンプレートエンジンを作成することを考えています。どのようにそれをしますか?それは正しいことですか?

0 投票する
1 に答える
241 参照

android - リソースを節約するAndroid - 複数のサービスを実行する

そのため、さまざまなタスクに対して複数のサービスを実行する必要があります。ただし、繰り返し値は同じです。これは、サービスが x 秒ごとにブロードキャストを送信していることを意味します (同じ x を取得しています)。今:システム/バッテリーにとってより効率的なもの:複数のサービスを実行するか、それらを1つにすると、サービスは受信アクティビティで常に使用されるとは限らないデータも送信します(x秒ごとにブロードキャストされるより大きな意図)ありがとうあらかじめ

0 投票する
1 に答える
3447 参照

python - Python gzip - .csv.gz ファイルの抽出 - メモリ エラー

ftp サーバーから .csv.gz ファイルにアクセスし、その内容を同じサーバー上の .csv ファイルに書き戻すスクリプトを作成しようとしました。この方法は、ファイルが 100 MB 未満であれば正常に機能するように見えますが、それを超えると失敗し、メモリ エラーが発生します。.csv ファイルを抽出する方法を見つけることができなかったので、ファイルの内容 (タプルのリスト) を 1 行ずつ読み取り、それを新しいファイルに書き込みます。

これを行うためのより効率的な方法、または .csv.gz ファイルから直接 .csv ファイルを抽出する方法はありますか?

0 投票する
1 に答える
3436 参照

android - cursor.getCount() でカウントを取得するか、SQL 句で COUNT を使用して rawQuery を実行しますか?

メモリ効率の点で優れているか、Android と SQLite で全体的なパフォーマンスが最高で、cursor.getCount() でレコード数を取得するか、通常の SQL 句で COUNT を使用して rawQuery を実行します (そして、cursor.getInt を使用します) (0) 後でカウントが返されます)?

注:結果は使用していません。カウントが必要なだけです。

0 投票する
12 に答える
1098 参照

c - 配列の検証 - 補助配列を使用しない

この質問は本物の頭脳派向けです。なぜなら、補助配列なしで行う必要があり、最も効率的でなければならないからです!

C プログラム - X の数値 (X=4 配列: 5,4,3,2 と仮定) を含む配列を受け取り、配列に 0 から X-1 までのすべての数値があるかどうかを確認する必要があります (X が 44 の場合は確認する必要があります)。配列内のすべての数値が 0 ~ 43 の場合)。

それは非常に効率的でなければなりません - つまり、アレイ上で 43 回実行するという選択肢はありません!

これを行う方法はありますか?? 私は何時間も成功せずにこれを理解しようとしています!!

O(n)でなければなりません。

0 投票する
1 に答える
316 参照

ruby-on-rails - Rails クエリと関連付けの最適化

アプリケーションに次の関連付けがあります。

ユーザーが気に入ったすべての投稿にアクセスしようとすると、次のループを使用しています

しかし、それは非常に非効率的です。

別の関連付けまたは別のループ方法を使用して、コードを改善する最良の方法は何ですか?

0 投票する
1 に答える
2430 参照

objective-c - NSScrollView無限/無限スクロール| サブビューの再利用

再利用可能なセルのようなものを実装する方法を探していますUI/NSTableViewが、NSScrollView。基本的には、WWDC2011のビデオ「Session104-AdvancedScroll ViewTechniques」と同じものが必要ですが、Mac用です。

私はこれを実現するためにいくつかの問題を抱えています。最初:NSScrollViewがありません-layoutSubviews。代わりに使用しようとしまし-adjustScrollたが、別の設定に失敗しましたcontentOffset

次に試したのはwidth、数百万ピクセルの非常に巨大なコンテンツビューを設定することでした(これは実際にはiOSと比較して機能します!)が、問題は、再利用プールをインストールする方法です。
新しい位置にスクロールしながらサブビューを移動するか、すべてのサブビューを削除して再度挿入する方がよいでしょうか。そして、どのように、どこでそれを行うべきですか?

0 投票する
6 に答える
3654 参照

java - より効率的なものは何ですか?オブジェクトを空にするか、新しいオブジェクトを作成しますか?

「新品」はどれくらい高いですか?つまり、同じオブジェクトを再利用することを目指すべきですか、それともオブジェクトが「範囲外」である場合、それを空にすることと同じですか?

たとえば、メソッドがリストを作成するとします。

メソッドの最後で、リストは使用されなくなります。これは、リストにメモリが割り当てられていないことを意味しますか、それとも(「作成された」ために)リストへのnullポインタがあることを意味します。

または、「リスト」をメソッドに送信し、メソッドの最後で次のように空にするlist.removeAll(list);こともできます。これにより、メモリの観点から何か違いが生じますか?

ありがとう!

0 投票する
5 に答える
2862 参照

java - メモリ効率の高い複数値マップ

こんにちは、次の問題があります。文字列と対応する整数値のリストを にMultiValueMap<String, Integer> 格納しています。約 13 000 000 百万の文字列を格納しています。1 つの文字列には最大 500 以上の値を含めることができます。単一の値ごとに、マップ上でランダムにアクセスできます。したがって、最悪のケースは 13 000 000* 500 プット コールです。これで、マップの速度は向上しましたが、メモリ オーバーヘッドがかなり高くなります。AMultiValueMap<String, Integer>は a 以外の何物でもありませんHashMap/TreeMap<String, <ArrayList<Integer>>。HashMap と TreeMap の両方に、かなりのメモリ オーバーヘッドがあります。完了したらマップを変更するつもりはありませんが、プログラムでのランダムアクセスのために、マップを高速かつできるだけ小さくする必要があります。(私はそれをディスクに保存し、起動時にロードしています。シリアル化されたマップ ファイルは約 600 MB を占めますが、メモリでは約 3 GB ですか?)

最もメモリ効率の良い方法は、文字列をソートされた文字列配列に格納し、値に対応する 2 次元の int 配列を持つことです。したがって、アクセスは文字列配列のバイナリ検索であり、対応する値を取得します。

現在、そこに到達する方法は 3 つあります。

  1. 作成フェーズでは、並べ替えられた MultivalueMap (TreeMap) を使用してすべてを格納します。すべての値の取得が完了したらmap.keyset().toArray(new String[0]);、[2 次元の int 配列を作成し、multivaluemap からすべての値を取得する] を呼び出して文字列配列を取得します。長所: 実装が簡単で、作成中も高速です。短所: マップから配列へのコピー中に、さらに多くのメモリを消費します。

  2. 最初から配列またはおそらく ArrayList を使用し、そこにすべてを格納します Pro: 最小のメモリ オーバーヘッド。短所:新しいキーを追加するたびに配列をソート/コピーする必要があるため、これは非常に遅くなります。また、対応するint配列を同じ順序に保つために、独自の(おそらくさらに遅い)ソートを実装する必要があります。弦。実装が難しい

  3. 配列と MultivalueMap をバッファーとして使用します。プログラムが作成フェーズの 10% または 20% を終了したら、配列に値を追加してそれらを整理し、新しいマップを開始します。長所: おそらくまだ十分に高速で、メモリ効率も十分です。短所:実装が難しい。

これらの解決策のどれも、私にとって本当に正しいとは思えません。この問題に対する他の解決策、おそらくメモリ効率の良い (MultiValue)Map 実装を知っていますか?

データベースを使用できることはわかっているので、わざわざ回答として投稿しないでください。データベースを使用せずにこれを行う方法を知りたいです。