2011-07-29 2 views
1

私のアプリは、起動時にいくつかのデータ(約50k)をダウンロードする必要があります。私は現在いくつかの状況、特に低速の接続速度でダウンロード速度を評価しています。ダウンロード速度の接続にはさまざまなものがあります。

以下に示す簡単なテストコードがあります。ボタンがファイルのダウンロードを開始し、測定を開始します。測定の終了は、ダウンロードが終了したときです(これはすべてメインスレッドbtwで実行されています)。

初めてボタンを押したとき、ボタンを2秒後などに連続して押すよりも、ダウンロード時間が大幅に長くなります。 10秒待ってからもう一度押すと、もう一度時間がかかります。

これはなぜですか?最初の接続に時間がかかりますか?私は以下のコードが非常に原始的であることを知っています。どのような接続を迅速に取得するための最良の方法でしょう。

編集:これは、ISP /電話会社がインターネット接続を処理する方法とはまったく関係があります。私のISPのインターネット接続は、私が積極的にネットワークを使用していないときに、ある種の最小限に抑えられていますか?そして、私が何かをダウンロードすると、スピードを上げるために、より多くの「チャンネル」が追加されますか? いくつかのSIMカードを確認しました。データレートが高ければ高いほど、動作はより一貫しています。ブランドAのSIMを使用すると、前述のような動作をする場合、ブランドB(プレミアム)を使用すると、すべてが問題ありません。事前に

感謝


NSURL *url = [NSURL URLWithString:@"http://myServer/testFeed1.zip"]; 
NSData *urlData = [NSData dataWithContentsOfURL:url]; 

...ファイル

たぶんキャッシュさ
+0

ダウンロードしたファイルはどこかにキャッシュされていますか? –

+0

透明なISPでHTTPプロキシなどを実行してキャッシュすることもできます。 – ewanm89

答えて

1

あなたのご意見ありがとうございますが、この動作は間違いなくISPのスピードスロットル(もちろんモバイル接続)から発生しています。接続が「見た目が良い」(3Gサインと良好なレセプション)であっても、異種SIMカード間の差異がどれほど大きいかを知ることは間違いありません。 キャッシュされていないメソッドを使用しましたが、変更されませんでした。

0

を保存..あなたがいることを確認するために、このリンクを使用することができます。myServerという/ testFeed1.zipを? <乱数>

+0

私はこれを試しました:ファイルを9回コピーし、名前を変更してからファイルをダウンロードしました。最初のダウンロードにはもう少し時間がかかります(8秒)。次のダウンロードは速くなります(1.5秒)。キャッシングの場合もそうでしょうか?私はそうは思わない、そう? – brainray

0

わかりませんが、dataWithContentsOfURL:は何らかのキャッシュを実装していると思います。したがって、測定した時間が長くなると実際のダウンロード時間になります。

NSError* error = nil; 
NSData* data = [NSData dataWithContentsOfURL:yourURL options:NSDataReadingUncached error:&error]; 

キャッシュが原因の場合は、ダウンロードには常に時間がかかるようになります。 (私は、コードスニペットhereを見つけました。)

更新:ダウンロード時間が問題になる場合 、あなたの代わりにNSURLConnectionを使用して非同期のダウンロードを行うことを検討すべきです。これにより、ユーザーエクスペリエンスが大幅に向上します。また、接続とダウンロード時間を別々に測定することもできます。それを行う方法についてHere's a simple example

+0

ありがとう、私は間違いありません。 – brainray