問題タブ [seek]
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.
linux - lseek64を_実際に_64ビットオフセットを返すようにするにはどうすればよいですか?
次にstrace:
- 20974464000==0x4E22CEC00-良い
- -500372480==0xffffffffe22cec00-悪い
(off64_t)lseek64(fd, 0, SEEK_END);
_llseekを誤って呼び出すように変更されます。
主要なdwordを切り落とすことなく、サイズが正しくなるようにするには、さらに何をすればよいですか?
directshow - IMediaSample DirectShow.Net を使用してキー フレームを探す
私の知る限り、フレームがキー フレームかどうかを確認するには、IMediaSample::IsSyncPoint() メソッドを確認する必要があります。このメソッドは、フレームがキー フレームの場合は 0 (S_OK) を返します。その他の場合。
しかし、IsSyncPoint() メソッドは、取得されて ISampleGrabberCB::SampleCB() コールバック メソッドに渡されるすべてのフレームで 0 を返すだけです。
私のコールバックに含まれるコードは単純です:
ここで何が欠けていますか?
linux - Proc-FSファイルから2回目に読み取るときにlseek()を使用しても安全ですか?
- 次回このファイルの更新された内容を取得するためにファイルを再度開くのではなく、ファイルを使用
lseek(fd,0)
してから使用するのは安全ですか?read(fd,buf)
/proc/stat
- そして、
mmap()
このファイルを開いた後の呼び出しは実際に何をしますか(以下を参照)?
私が直面している問題は、トップレポートのCPU使用率が低すぎることです(ソフトウェア割り込みの場合は10%対100%)。straceは、topがこのファイルを再度開かず、代わりに最初に探してもう一度読み取ることを示します。そして、どういうわけか、次回このファイルから読み取られる内容は、catforfileだけを実行したときに得られる内容と一致しません/proc/stat
。
また、topとcat/proc/stat
を同時にループで実行すると、topは正しいCPU使用率を報告し始めます。
私が見つけたもう1つの違いは、topはファイルmmap()
を開いた直後にcallを使用しますが、それを行わないことです。これも私の問題に関連している可能性があるかどうかはわかりません(ここにあるため):/proc/stat
cat
filesdes=-1
2.6.32-27サーバーイメージでUbuntu10.04.1デスクトップエディションを使用しています。CPUはIntelQ6600です。
android - http プロトコルで入力ストリームをシーク (スキップ) する最速の方法
ある種のダウンロード サービスを作成していますが、以前の部分的なダウンロードを再開する機能があります。私は現在、このようなスキップメソッドを使用しています
テストを行ったところ、入力ストリームで 45 mb をスキップするのに約 57 秒かかりました。特定のネイティブ コードがこれを行う方法に興味があります。たとえば、メディア プレーヤーはリモート ストリームの任意の部分を瞬時にシークできます。同じライブラリにアクセスできないことはわかっていますが、同様のことを達成できますか。
ところで、そのテストはwifiで行われました。通常のデータ ネットワークでは明らかに非常に遅くなります。
更新:非常に簡単です(以下に感謝します)
delphi - TADOTable、Seek、clUseServer の組み合わせ方
Delphi の ADOTable でカーソル位置が clUseServer に設定されている場合、シーク機能を使用できますか? 代わりにlocate関数を使用できることはわかっていますが、seek関数よりもはるかに遅くなります。
ffmpeg - FFmpeg でのバイト単位のシーク
以下について、アドバイスをいただければ幸いです。FFmpeg の libavformat に基づくビデオ コンバーターを開発しています。正確なシーク API を実装する必要があります。まず、すべてのパケットのプレゼンテーション タイムスタンプ (PTS) を保存するビデオ ストリームのインデクサーを開発しました。次に、エンコーダーはこのインデックスを使用してビデオ ファイルをシークします。この操作の前に、たとえば、ファイルを mp4 コンテナーに再多重化します。内部に正しいインデックスがないビデオ、またはビデオにインデックスがまったくないビデオには、Remux が必要です。もちろん、以前に作成されたインデックスを使用して、バイトごとのシークを実装する必要があります。これを実装するために多くの方法を試しましたが、成功しませんでした。FFmpeg で正確なバイト単位のシークを実装する方法をご存知でしょうか? よろしくお願いします。
blob - H2 データベースで getBytes(long pos, int length) による BLOB の覗き見が遅いのはなぜですか?
ブロブを覗く必要があるアプリケーションがあり、(getBytes(long pos, int length) を介して) 少数のバイトを取得します。ブロブは約 30MB です。ブロブの先頭付近のバイトを要求すると、パフォーマンスは妥当です。ブロブの終わり近くのバイトを要求すると、パフォーマンスが大幅に低下します。ソース コード (JdbcBlob.java) を見ると、BLOB が (入力ストリームを介して) ランダムではなく順次読み取られているように見えます。
誰かが回避策を知っていますか? 私は H2 の大ファンであり、この問題は取引を妨げるものではありませんが、改善される可能性があると思います.
ありがとう
c# - FileStream.Seek の使用
FileStream.Seek を使用して、行にすばやくジャンプして読み取ろうとしています。
しかし、私は正しい結果を得ていません。私はこれをしばらく見ようとしましたが、何が間違っているのか理解できません。
環境:
OS: Windows 7
フレームワーク: .NET 4.0
IDE: Visual C# Express 2010
ファイルの場所のサンプル データ: C:\Temp\Temp.txt
コード:
私が得る出力:
私の問題は、次の出力にあります。
行の出力は次のようになります: 0005|100!2500
なぜこれが起こっているのかわかりません。
私は何か間違ったことをしていますか?回避策はありますか? また、シークなどを使用してこれを行うより速い方法はありますか?
(私はコードベースのオプションを探していますが、Oracle や SQL Serverではありません。議論のために、ファイルサイズは 1 GB としましょう。)
どんな助けでも大歓迎です。
ありがとう。
更新:
ここで 4 つのすばらしい回答を見つけました。どうもありがとう。
サンプルのタイミング:
いくつかの実行に基づいて、次の方法が最良のものから良いものまであります。良いものでさえ、最高に非常に近いです。
10,000 行を含むファイルで、2.28 MB。すべてのオプションを使用して、同じ 5000 のランダムな行を検索しました。
- Seek4: 経過時間: 00:00:00.0398530 ms -- リッチ・メルトン
- Seek3: 経過時間: 00:00:00.0446072 ms -- Valentin Kuzub
- Seek1: 経過時間: 00:00:00.0538210 ms -- ジェイク
- Seek2: 経過時間: 00:00:00.0889589 ms -- bitxwise
以下にコードを示します。コードを保存したら、 と入力するだけで呼び出すことができますTestPaddedFileSeek.CallPaddedFileSeek();
。名前空間と「参照の使用」も指定する必要があります。
`
`
c - 巻き戻し(ファイルポインタ)してからfwriteします。fwrite はファイルの内容を上書きしませんか? ハ
私はこれをどこかで見つけました。
ファイルが書き込まれているときに rewind(fileptr) が実行され、ファイルの先頭に書き込むべきものが書き込まれます。でも最初に書くと、ファイルの中身が上書きされてしまうのではないですか?お知らせ下さい。
c++ - stdin/std::cin がシークをサポートしているかどうかを確認します
編集:コードに愚かなバグがあり、これを修正したので、今では説明できます。それに応じて投稿を更新しました。
次のコードは、ライン バッファー内でのシークが機能することを示しています。
まず、何かをプログラムにパイプしたときの結果。
次に、「a[enter]s[enter]d[enter]f[enter]」と入力しました。
getc
3 番目に、 /get()
呼び出しごとに「asdf」と入力しました。
シークは、ライン バッファー内で機能しているように見えます。
これがコードです。