問題タブ [memory-mapped-files]
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.
java - JavaでFileChannelを使用してマップされたメモリからファイルをマップ解除する方法は?
を使用してファイル ("sample.txt") をメモリにマッピングしFileChannel.map()
、次に を使用してチャネルを閉じていますfc.close()
。この後、FileOutputStream を使用してファイルに書き込むと、次のエラーが発生します。
java.io.FileNotFoundException: sample.txt (要求された操作は、ユーザー マップ セクションが開いているファイルに対して実行できません)
これは、ファイルを閉じた後でもファイルがまだメモリにマップされていることが原因であると推測されますFileChannel
。私は正しいですか?もしそうなら、どうすればメモリからファイルを「アンマップ」できますか? (API でこれを行う方法が見つかりません)。ありがとう。
編集: (unmap メソッドの追加) は RFE として Sun に送信されたようです: http://bugs.sun.com/view_bug.do?bug_id=4724038
windows - SetFileBandwidthReservation はメモリ マップト ファイルのパフォーマンスに影響しますか?
この関数はメモリ マップト ファイルのパフォーマンスに影響しますか?
これが私が解決する必要がある問題です:
ディスク アクセスで競合する 2 つのアプリケーションがあります。「リーダー」と「アップデーター」です。システム全体が Windows Server 2008 R2 x64 上で動作
「アップデーター」は常にリニアにディスクにアクセスし、データを更新します。それらのシステムは、アップデーターが常に無限のデータを更新できるように設定されています。2TB のディスクドライブ全体を占める膨大な方程式の解を常に近似していることを考慮してください。アップデーターは、ReadFile と WriteFile を使用して、直線的にデータを処理します。
「リーダー」は、データの一部を取得するためにユーザーによって呼び出されることがあります。通常、ユーザーはドライブからいくつかの 4kb ブロックを読み取って停止します。場合によっては、最大 100MB まで連続して読み取る必要があります。例外的に数ギガバイトまで。リーダーはファイルをメモリにマップして、必要なデータを取得します。
私が達成したいのは、「リーダー」が絶対的な優先順位を持ち、必要に応じて「アップデーター」が完全に停止し、「リーダー」がユーザーが必要とするデータをできるだけ早く取得できるようにすることです。
この問題は、SetPriorityClass および SetFileBandwidthReservation 呼び出しを使用して解決できますか?
同期ログインを「リーダー」と「アップデーター」に入れ、OSに優先順位を任せるのは本当に嫌です。
java - Javaメモリマップトバイトバッファの拡張
新しいサイズがディスク上のマップされたファイルに反映されるように、Javaメモリマップされたバイトバッファを拡張する方法はありますか?
.net - Python経由で.net上に作成されたメモリマップファイルにアクセスする
.net 4 の MemoryMappedFile.CreateNew(mapName, capacity) を使ってメモリマップドファイルを作ってみました
cpython から mapName でこの mmf にアクセスできますか?
以下のようにしてみました。
しかし、パラメーターが正しくないことを示す WindowsError [エラー 87] が返されます。
ウィンドウズビスタを使用しています。
paging - メモリマップトファイルのデータは順番にフラッシュされることが保証されていますか?
システムにハードウェアレベルで障害が発生した場合でも、レコードのセットが常に一貫した状態に回復できることを保証して、1つのファイルにさまざまなサイズのレコードを多数保持するファイルストレージメカニズムを実装しようとしています。
これまでのところ、私が思いついたすべてのスキームは、データを順番に書き込むことに重点を置いています。書き込みが成功したことを確認するデータが各レコードの最後に追加されます。ただし、フラッシュ時にデータがディスクに順番に書き込まれるとは限らない場合は、コンテンツデータの前に確認データを書き込むことができます。
これを回避する2つの明白な方法がありますが、どちらも望ましくありません。
- コンテンツをフラッシュしてから、確認を書き込んでフラッシュします。フラッシュを追加すると、パフォーマンスが低下する可能性があります。
- 確認にチェックサムを含めます(内容を読んで有効であることを確認する必要があります)。
Windows(32ビットおよび64ビット)でC#を使用しており、.Net4.0のメモリマップトファイルの実装を使用しています
qt - QT の非常に大きな QImage とメモリ マップ ファイル
QImage を MMF ファイルにバインドして、ディスク上で直接メモリを消費することなく画像を操作したいと考えています。残念ながら、私のコードはメモリ内にコピーを作成します。
私のプログラムは非常に大きな画像を処理する必要があります。
c - ダーウィンには本当に mremap がありませんか?
Macでメモリマップファイルを再マップする方法を見つけようとしています(利用可能なスペースを拡張したい場合)。
Linux の世界の友人が持っているのを見ますmremap
が、私の Mac のヘッダーにはそのような機能が見つかりません。/Developer/SDKs/MacOSX10.6.sdk/usr/include/sys/mman.h
次のものがあります。
mmap
mprotect
msync
munlock
munmap
- でもいいえ
mremap
man mremap
私の恐れを確認します。
現在、マップされたファイルのサイズを変更したい場合は、ロードされたすべてのページを無効にする必要がありますmunmap
。mmmap
もっと良い方法があるはずです。もちろん?
Mac OS X と Linux で動作するコードを書こうとしています。必要に応じて、それぞれのケースで最適な関数を使用するようにマクロを設定することもできますが、適切に実行することをお勧めします。
macos - OSX でバッキング ファイルを使用せずにメモリ マップト ファイルを作成するにはどうすればよいですか?
データにアクセスするための基本的な手段としてファイル記述子を使用するライブラリを使用したいと考えています。パフォーマンス上の理由から、このライブラリの関数を使用する前にファイルをディスクにコミットする必要はありません。
その場で (大きな) データ BLOB を作成し、ライブラリを呼び出してサーバーに送信したいと考えています。現状では、ファイルをディスクに書き込んで開き、FD をライブラリに渡し、終了するのを待ってから、ディスク上のファイルを削除する必要があります。必要に応じて BLOB を再作成できるため (また、過度の仮想メモリ ページングが発生するほど BLOB は大きくないため)、BLOB をディスクに保存しても何も得られず、パフォーマンスが大幅に低下します。
メモリ マップされたエンティティとしてのみ存在するデータ ブロックに FD を割り当てることはできますか?
android - 頂点を持つ Android メモリ マップ ファイル
大きなファイル (約 50Mb) に保存されている頂点をレンダリングしようとしています。ファイル レイアウトが最適化されているので、スライスを取り、それを opengl に渡して三角形のストリップを直接レンダリングできます。
これはエミュレーターで機能しますが、同じコードを私のマジック (Android 1.5) で実行すると、libhgl.so の SIGBUS でクラッシュします。ドライバーの問題のように聞こえますか?
頂点を手動でローカル バッファ (メモリ マップされていない) にコピーしようとしましたが、動作しますが、300 ~ 600 ミリ秒の長い時間がかかります。
誰でも経験がありますか?
c++ - Win32 メモリ マップ ファイルと CRT fopen/fread のパフォーマンス
ファイルを順番に読み取り (スキャン)、その内容を処理する必要があります。ファイル サイズは、非常に小さい (数 KB) から非常に大きい (数 GB) までさまざまです。
Windows 7 64 ビットで VC10/VS2010 を使用して、次の 2 つの手法を試しました。
- Win32 メモリ マップ ファイル (つまり、CreateFile、CreateFileMapping、MapViewOfFile など)
- CRT からの fopen と fread。
メモリ マップド ファイル手法は CRT 関数よりも高速になる可能性があると考えていましたが、いくつかのテストでは、どちらの場合も速度はほぼ同じであることが示されました。
MMF には、次の C++ ステートメントが使用されます。
ファイルは、チャンクごとに順番に読み取られます。各チャンクSYSTEM_INFO.dwAllocationGranularity
のサイズです。
MMF と CRT の速度がほぼ同じであることを考慮すると、CRT 関数の方がシンプルでマルチプラットフォームであるため、CRT 関数を使用します。しかし、私は興味があります: MMF テクニックを正しく使用していますか? ファイルを順次スキャンする場合の MMF のパフォーマンスが CRT と同じであるのは正常ですか?
ありがとう。