私はwin32で古い学校のmmorpgをプログラミングしています(これは非常に古いマシンで動作することになっています)、ASCIIまたはUnicode(まれに)のファイルを読み込み、カウントしたいその中の行数。それらのマシンのメモリが非常に非常に少ないという事実のため、私はRAMに一度に4KB以上を保持することはできません。win32でファイルを読む
ありがとう
私はwin32で古い学校のmmorpgをプログラミングしています(これは非常に古いマシンで動作することになっています)、ASCIIまたはUnicode(まれに)のファイルを読み込み、カウントしたいその中の行数。それらのマシンのメモリが非常に非常に少ないという事実のため、私はRAMに一度に4KB以上を保持することはできません。win32でファイルを読む
ありがとう
メモリバジェットのサイズの1/10の小さなチャンクでファイルを一度に読み込みます。各チャンクの行末を数えます。
あなたが直面する唯一の本当の問題は、1つのチャンクの終わりから次のチャンクの始まりまでにわたるcr + lfペアを処理する必要があることです。
脇に、確実に4KBではなく4MBを意味しますか?
リターンキャリッジと改行以外のすべてを無視してファイルをピークするだけでも実行可能な場合もあります(行末規則に従います)。このようにするのは実際は非常にスピーディーであり、フットプリントはごくわずかです。 –
@Mikeそれはまさに私が提案しているものです。 –
メモリに約4KBしか格納できないと言ったときに一度に128KBを読み込むことに問題はありませんか?ただ疑問に思う。 –
ただ、ちょうど私が思う、次の...
type foo.txt|find /C /V "~`[email protected]#$%^&*()_+"
それとも本当に少し違う何かを提案する...しばらく
find /C /V "" foo.txt
あなたが唯一* 1ライン分の十分なストレージを持っている必要がありますされて*ファイル内にあります。あなたが行を数えればいいということさえありません。単にfgets()関数を使います。 NULLを返すまで呼び出してください。 '\ n'の最後に返された文字列をチェックし、行カウンタをインクリメントします。 –
これはクライアントかサーバーですか?確かに、大規模なリソースがなくても "大規模なマルチプレイヤー"ゲームを作ることはできません。 – geoffspear