2016-08-01 9 views
3

       親愛なるすべて、アレイ/メモリ操作スウィフト

       私はメモリ管理のためスウィフトで高速なソリューションを探しています。私はどういう意味ですか?私は配列(またはバッファ)を例えば1000000バイトで初期化し、ゼロ(0)で埋めて、別の配列(またはメモリバッファ)の所定の位置に挿入する必要があります。そして、各要素の値を素早く変更する必要があります。これはSwiftでどのように達成できますか?アレイのバージョンは次のとおりです。

1.新しいアレイの初期化 - それを行うには3つの方法があります。 1.38 MS

let tmp = Array<Int8>(count: 1000000, repeatedValue: 0) 

オプションII - 時間:385.54 MS

let tmp = Array<Int8>(Repeat(count: 1000000, repeatedValue: 0)) 

- 時間

オプションI:私はこの方法の各々の10の連続実行時間を測定しましたオプションIII - 時間:586.43 ms

let ptr = UnsafeMutablePointer<Int8>.alloc(1000000) 
ptr.initializeFrom(Repeat(count: 1000000, repeatedValue: 0)) 

オプションIIおよびIIIは、対気速度から借りています。私はIとIIは、オプションの「x」の位置に他のアレイで新しい配列を挿入

2.このoportunityを使用したいと;-)

共同編集のために、このような素敵な本を彼に感謝です私は以下を使用しています:

array.insertContentsOf(tmp, at: x) 

このような操作(「x」の値にかかわらず)に必要な時間は654.19 msです。私は本当にオプションIIIでこれを行う方法を知らない。

3.変更新しいアレイの

値は、このような(もちろん)変更可能な値:

array[13453] = 20 

プロセス全体をスピードアップするために、任意の勧告、特に挿入(パート2)、歓迎以上のものです。実装は配列を使用するかもしれません...ポインタ...要件が満たされているかどうかは実際問題ではありません。

I.

+1

測定中にコンパイラの最適化を有効にしましたか? – Kubba

+0

2番目の質問 - 大きなコレクションを使用する意思は何ですか? CoreGraphicsよりもイメージ処理が必要な場合は、このジョブをよりうまくやります。 – Kubba

+0

最適化が役立ちました。どのような愚かな間違い。結論は何ですか?あまりコーディングしないでください...あなたの感覚を失い始めるでしょう。 私はそれを受け入れることができるように答えてください。 –

答えて

1

測定中に最適化をオンにします - スウィフトの性能はすべてです。

+0

年前...私がプログラミングを始めたとき、配列経由ではなくポインタ経由で変数にアクセスする方が速かった。私はこれをどのように迅速に達成できるのか考えていますか? 10〜20Mバイトのアレイにアクセスするのは本当に遅いです...もっと速く推薦してください。 –

+0

はい最適化が効果を発揮します。私のテストケースでは、16,737,732バイトの配列をゼロにすることは、2.37秒(最適化なし)から0.0165秒(最適化)になりました。それは143のタイムズが速くなりました! Btwは同じマシンでCのmemsetを0.00827秒しか取らなかった。これはもう2倍のスピードアップだった。私はSwiftがCPU上での高速画像処理に適した言語であるとは確信していません。 – wcochran

+0

あなたのテストであなたが使ったSwiftのバージョンは3つか4つでしたか? –