私は数年にわたって1Cプログラミングに携わってきましたが、
「以前は気にも留めなかった知識のギャップがある場合、トレーニングコースはありますか?」という考え
を思いつきました。 すぐに言ってやった。 私は座って、コースを聞いて、周期的な演算子を取得し、次に
考え直しました(はい、彼らは私にはあまり現れません) -
「そして、どのサイクルが速いですか?」 確認する必要があります。
そこで、1Cを使用してサイクルを編成する方法を
5つ見つけました。
最初の種類のサイクル、条件付きで
「ForPo」と呼びましょう。
= 0 (); ;
第二の種類の
「みんなのために」 :
(); ;
3番目の
「バイ」 :
<> (); = + 1; ;
その後
、アセンブラーの若者を思い出しました-Ifサイクル:
~: <> (); = + 1; ~; ;
そして最後に、
「再帰」 (, ) (); <> (+1, ); ;
当然、再帰をサイクルに帰することは完全に正しいわけではありませんが、それにもかかわらず、その助けを借りて、同様の結果を達成できます。 私は、再帰はさらなるテストに参加しなかったとすぐに言わなければなりません。 まず、すべてのテストは1,000,000回の反復で実行され、再帰はすでに2,000で落ちました。次に、再帰率は残りのサイクルの速度よりも数十倍低くなっています。
最後の隠れ家。 条件の1つは、サイクル内のアクションのパフォーマンスです。 まず、空のループが使用されることはほとんどありません。 次に、すべてのコレクションに対して「全員向け」サイクルが使用されます。これは、同じ条件下でテストが行われるように、残りのサイクルがコレクションで動作する必要があることを意味します。
さあ、行きましょう。 ループの本体として、事前に入力された配列からの読み取りが使用されました。
= .();
または、「全員向け」サイクルを使用する場合
= ;
プラットフォーム8.3.5.1231で、3種類のインターフェイス(通常のアプリケーション、マネージドアプリケーション、およびタクシー)のテストを実施しました。
8.3.5.1231の結果インターフェース | のために | みんなのために | さようなら | もし |
通常の申請 | 5734.2 | 4680,4 | 7235.4 | 7263.0 |
管理対象アプリケーション | 5962.4 | 4882.6 | 7497.4 | 7553.6 |
タクシー | 5937.2 | 4854.6 | 7500.8 | 7513.0 |
Numbersは、関数
CurrentUniversalDateInMilliseconds()を使用して取得したミリ秒単位の時間で、サイクルの前と完了後に呼び出しました。 5つの測定値の算術平均を使用したため、数値は小数です。 パフォーマンス測定を使用しなかったのはなぜですか? 私の目標は、コードの各行の速度を測定することではなく、同じ結果のサイクルの速度のみを測定することでした。
それがすべてのように思えますが、-テストをテストしてください!
プラットフォーム8.2.19.106の結果
8.2.19.106の結果インターフェース | のために | みんなのために | さようなら | もし |
通常の申請 | 4411.8 | 3497.2 | 5432.0 | 5454.0 |
管理対象アプリケーション | 4470.8 | 3584.8 | 5522.6 | 5541.0 |
プラットフォーム8.2は平均で8.3より25%高速です。 私はそのような違いを少しは期待していなかったので、別のマシンでテストを行うことにしました。 結果は表示しませんが、
この構成を使用して自分で生成でき
ます。 8.2は20%速くなったとしか言えません。
なんで? カーネルを分解するつもりはなかったのですが、パフォーマンスの測定を検討していました。 8.3の循環操作自体は、8.2よりもやや速いことが判明しました。 しかし、ライン上
= .();
つまり、コレクションアイテムを変数に読み込むと、パフォーマンスが大幅に低下します。
要約すると:
サイクル速度の割合のために | みんなのために | さようなら | もし |
78.97% | 64.57% | 99.57% | 100.00% |
なんでこんなこと? 私自身、いくつかの結論を出しました。
1.特別なサイクル-「全員向け」を使用できる場合は、それを使用することをお勧めします。 ちなみに、それ自体は他のサイクルよりも長く機能しますが、コレクションアイテムへのアクセス速度ははるかに高速です。
2.繰り返しの回数が事前にわかっている場合は、「ForPo」を使用します。 「バイ」の動作は遅くなります。
3. 「If」サイクルを使用すると、他のプログラマは明らかにあなたを理解しません。