問題タブ [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.
c# - C#でフィールドを「読み取り専用」としてマークする利点は何ですか?
メンバー変数を読み取り専用として宣言する利点は何ですか? クラスのライフサイクル中に誰かがその値を変更するのを防ぐだけですか、それともこのキーワードを使用すると速度や効率が向上しますか?
perl - スパース行列のゼロ以外の要素、カウント、およびインデックスのキャプチャ
次の疎行列 A があります。
次に、そこから次の情報を取得したいと思います。
行列が列方向にスキャンされるときのエントリの累積数。収量:
Ap = [0, 2, 5, 9, 10, 12];
行列が列方向にスキャンされるため、エントリの行インデックス。収量:
Ai = [0, 1, 0, 2, 4, 1, 2, 3, 4, 2, 1, 4];
行列が列方向にスキャンされるため、非ゼロの行列エントリ。収量:
斧 = [2, 3, 3, -1, 4, 4, -3, 1, 2, 2, 6, 1];
実際の行列 A は非常に大きくなる可能性があるため、Perl でこれらの要素をキャプチャできる効率的な方法はありますか? 特に、すべての行列 A を RAM に丸呑みすることなく。
次のコードで立ち往生しています。それは私が望むものを与えません。
algorithm - 大規模なデータセットの中央値を計算するメモリ効率の良い方法は?
1 台のコンピューターが 100 万個の数字しか保持できない場合、1 億個の数字から中央値を見つけるにはどうすればよいでしょうか?
java - オンデマンドでファイルからコレクションにデータをロードする最も効率的な方法は何ですか?
私は、ユーザーが数千行の可能性がある複数のファイルを解析できるようにするJavaプロジェクトに取り組んでいます。解析された情報はさまざまなオブジェクトに保存され、コレクションに追加されます。
GUIはこれらすべてのオブジェクトを一度にロードしてメモリに保持する必要がないため、ファイルからデータをロード/アンロードする効率的な方法を探しています。これにより、ユーザーが要求したときにのみデータがコレクションにロードされます。 。
私は今、ただの評価オプションです。また、データのサブセットをコレクションにロードし、それをGUIに表示した後、以前に観察されたデータをリロードするための最良の方法である場合についても考えました。パーサー/Populateコレクション/PopulateGUIを再実行しますか?または、コレクションをメモリに保持する方法、またはコレクション自体をシリアル化/逆シリアル化する方法を見つけますか?
ある種のデータフィルタリングが実行されると、データのサブセットのロード/アンロードがトリッキーになる可能性があることを私は知っています。IDでフィルタリングすると、新しいサブセットには、以前に分析された2つのサブセットのデータが含まれるとしましょう。これは問題ありません。データ全体のマスターコピーをメモリに保持します。
大量のデータを処理する場合、google-collectionsは優れていて効率的であり、多くのことを単純化するメソッドを提供するので、コレクションをメモリに保持するための代替手段を提供する可能性があることを読みました。これは一般的な話です。どのコレクションを使用するかという問題は、別個の複雑なものです。
このタイプのタスクに関する一般的な推奨事項を知っていますか?同様のシナリオであなたが何をしたか聞きたいです。
必要に応じて、より詳細な情報を提供できます。
r - R でのきちんとした/効率的な関数記述 (ガベージ コレクション)
私はコンピュータ エンジニアではありませんが、生物学にルーツがあるため、私の無知を許してください。私はオブジェクトの事前割り当ての大ファンになり (Patrick Burns による SO と R inferno に敬意を表します)、コーディングの習慣を改善したいと考えています。この事実の代わりに、より効率的な関数を書くことを考えていて、次の質問があります。
次のループの開始時に上書きされる変数を削除する利点はありますか、それとも時間の無駄ですか? 議論のために、古い変数と新しい変数のサイズが非常に似ているか同じであると仮定しましょう。
c# - メモリ効率の高いファイルの追加
コンテンツを1つのファイルにマージする必要があるファイルがいくつかあります。私はこれを行う次のコードを持っています...しかし、それはメモリ使用量の点でかなり非効率的です...あなたはそれを行うためのより良い方法を提案しますか?
Util.MoveFile関数は、単にボリューム間でのファイルの移動を考慮します
}
javascript - 何がより効率的ですか?== をチェックするか、変数を変更するだけですか?
X という変数があるとします。たとえば、5 秒ごとに X = true にしたいとします。(この 5 秒間は true または false のいずれかになりますが、5 秒経過すると true にリセットされます)。
値がすでに true かどうかを確認し、そうでない場合は true に再割り当てする方が効率的でしょうか? それとも単に X = true ですか?
言い換えれば、どちらがより速く実行されるでしょうか?
対
一方では、最初のプログラムは、必要がなければ変数を変更しません。一方、2 番目のプログラムでは、X が何に等しいかをチェックする必要はありません。まっすぐ潜ります。
java - 効率的な数独ソルバーの構築
はい、これは新しいものではなく、すでに多くの問題が出回っていることは承知していますが (独自のタグさえあります)、Java で Sudoku Solver を作成したいと考えています。効率的。
おそらく、プログラムでこれを行う最も簡単な方法は、大量の for ループを各列と行で解析し、各セルの可能な値を収集してから、1 つの可能性だけでセルを除外することです (数値が 1 つしか含まれていないか、またはパズルが解けるまで、この数字を含む行/列の唯一のセルです)。もちろん、このアクションについて完全に考えると、すべてのプログラマーの心に危険信号が表示されます。
私が探しているのは、可能な限り最も効率的な方法でこの吸盤を解決するための方法論です (あまり多くのコードを含めないようにしてください - 私はその部分を自分で理解したいと思っています)。
可能であれば、数学的アルゴリズムは避けたいと思っています。それらは簡単すぎて、100% 私の仕事ではありません。
誰かが Sudoku パズルを解くための段階的で効率的な思考プロセスを (人間またはコンピュータによって) 提供できれば、私はとても幸せです :)。私は漠然としたものを探しています (それは挑戦です) が、私を始めるのに十分な情報を提供します (完全に迷うことはありません)。
どうもありがとう、
ジャスティアン・マイヤー
編集:
私のコードを見て、私は次のことを考えました: これらの解法状態 (つまり、数独グリッド) を格納する可能性にはどのようなものがあるでしょうか。2D 配列と 3D 配列が思い浮かびます。どれが一番いいでしょうか?2D は表面から管理する方が簡単かもしれませんが、3D 配列は「ボックス」/「ケージ」番号も提供します。
編集:
どうでも。3D 配列を使用します。
graph - グラフを効率的に維持する方法(2次元配列)
メモリスペースまたはビルド時間の観点から、グラフ情報を保持するためのより効率的な方法(つまり、2次元配列として保持するよりも効率的)を知っている人はいますか?
値は0〜255の間に制限されていると想定できます。
ありがとう!
python - Python (または C) でのメモリ効率の良い文字列から文字列へのマップ
約 100 万個のキーと値のペアを格納するためのメモリ効率の良いデータ構造が必要です。ここで、キーは約 80 バイトの文字列で、値は約 200 バイトの文字列で、キーと値の合計サイズは約 280 MB です。また、キー、できればハッシュマップによる効率的な値の検索も必要です。メモリのオーバーヘッドはできるだけ少なくする必要があります。たとえば、280MB の有用なデータの場合、データ構造は 300MB を超える仮想メモリを使用しないでください (malloc()
オーバーヘッドとその他すべて)。使用パターンは次のとおりです。空のデータ構造から始めて、キーを変更したり、値の長さを変更したりせずに、徐々に入力します。プラスとして、データ構造は値の長さの変更をサポートする場合がありますが、100% の値のオーバーヘッドが発生します (つまり、x 値バイトの場合、x バイトが未使用のバッファー領域で一時的に無駄になる可能性があります)。
純粋な Python モジュール、組み込みの Python モジュール、またはできれば (C)Python バインディングを使用した C 実装が必要です。データ構造全体をディスクにシリアライズして、非常に迅速に読み戻すことができればと思います。
このような小さなオーバーヘッドが可能であることを証明するために、オープン アドレス指定を使用した単純な設計を作成しました。125 万要素のハッシュ テーブルには、1MB のデータ ブロックへの 4 バイトのポインターが含まれており、データ ブロックにはキーと値の長さがベースとして含まれています。 -128 ヴァリント。この設計には重要な制限があります。メモリ領域を無駄にせずにペアを削除または変更することはできません。それぞれ 280 バイトの 100 万のキーと値のペアを使用した私の計算によると、オーバーヘッドは 3.6% (10 080 000 バイト) 未満です。上記の制限はより寛大で、20 000 000 バイトのオーバーヘッドが許容されます。
http://www.pytables.org/を見つけました。これは、データの高速アクセスとメモリ効率の高いパッキングを提供します。それが私のニーズに合っているかどうかを確認するために、もっと詳しく調べなければなりません。