4

低速のファイル システム (ネットワーク、CD/DVD、またはスピンダウンした HDD など) でファイルを操作しているときに、アプリケーションの UI がフリーズしないようにしたいと考えています。

Cocoa ファイルシステム操作を直接使用しています。テストのためだけにすべてをモックまたは抽象化するのは大変な作業になるのではないかと心配しています。さらに、私のプログラムがファイルシステムに触れる明らかでない方法が存在する可能性があります。

テストにネットワーク ドライブを使用してみましたが、OS キャッシングによりテストが反復不可能になり、... 速すぎます :)

故意に遅い MacFuse ファイルシステムのようなものはありますか? 予期しない遅延によって引き起こされたすべての UI の問題と競合状態を見つけることができる他の方法はありますか?

4

5 に答える 5

2

最も簡単な答えは、他の場所で説明されているようにMacFUSEです。これは非常に簡単にシミュレートできます。また、NFS 経由で共有をマウントしてから、組み込みの を使用してビット スロットルを使用することもできますipfw

ipfw pipe 1 config 1KByte/s ipfw add 1 pipe 1 src-port 2049

または WebDAV を使用している場合

ipfw add 1 パイプ 1 src-port 80

これにより、定義したパイプレベルでリクエストがドリップフィードされます。後で再びそれを取り除くことができるはずです:

ipfw 削除 1

于 2009-09-24T22:08:13.573 に答える
1

Cocoa フレームワークを使用して MacFUSE ファイルシステムを作成するのは非常に簡単です。実際、ローカルファイルシステムをミラーリングするだけのサンプルシステムも含まれていると思います。すべての操作中に一時的に sleep() を呼び出すように、そのコードをすばやく適応させてみませんか?

于 2009-09-21T10:27:28.420 に答える
1

問題が発生することを心配している場所に応じて、最初に考えたのは、アプリとファイル i/o の間に関数呼び出しのレイヤーを追加し、そのレイヤーでいくつかの sleep() 呼び出しを構築することです。つまり、使用している言語が何であれ、「read」呼び出しを「readDelegate」に置き換え、readDelegate を指定された時間スリープさせてから、実際の読み取りを実行して値を返します。生産に入る準備ができたら、余分なレイヤーを引き出す必要さえなく、スリープを削除するだけです.

于 2009-09-21T16:54:48.243 に答える
1

たぶん遅いサムドライブを購入しますか?Best Buy で氷河期のものをいくつか見つけました。いくつかの USB ハブと、場合によってはキーボードを介してそれらを接続すると、非常にポーキーな接続になります。

-W

于 2009-09-20T08:36:32.923 に答える
0

フロッピードライブはどうですか?USBなどで簡単に接続できる外部のものがあるはずです...

于 2009-09-25T08:17:10.173 に答える