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