3

いくつかのバイト配列を使用する関数を書いています。ただし、常に最新のものを保持するだけで済みます。関数の開始時(メインループの前)に単一のbyte []を宣言し、それから最新の値を割り当て続けることに何か問題がありますか?逆に、関数の各段階でバイト配列インスタンスと変数を作成する方が良い方法ですか?この繰り返しの割り当てにより、パフォーマンスが低下しますか?

4

2 に答える 2

3

配列を宣言すると、C / C ++とは異なり、配列はヒープに割り当てられ、変数は実際には配列への参照になります。したがって、同じ変数を再利用しても、メモリの再割り当てから節約することはできません。配列がまったく同じサイズの場合、一度割り当てて同じオブジェクトを再利用すると、パフォーマンスが大幅に向上します。同じ参照を再利用することで得られる唯一の利点は、新しい配列を指すと、古い配列をガベージコレクションできることです。ただし、これを実現する方法は他にもあります。たとえば、nullに設定するなどです。

于 2012-07-31T02:17:52.633 に答える
2

これらのいずれかを実行するために必要な作業量に違いはありません。コンパイラはそれらを同一の実装に変換します。

注意すべき最も重要なことは、C#では、「新規」と言わない限り、変数宣言は実際にはリソースをコミットしないということです。C ++に精通している場合は、すべてのC#変数宣言に暗黙の*が関連付けられていることを想像してください。たとえば、あなたの場合:byte[] *onePageOfBytes。バイト配列を提供するように要求している関数は実際の割り当てを行います。以前の配列をリサイクルする方法を知らない限り、変数の定義を避けようとしても何も得られません。

于 2012-07-31T02:21:33.730 に答える