Есть ли какое-либо преимущество в использовании «статического» на частных концертах? - PullRequest
3 голосов
/ 30 июля 2010

Просто интересно, есть ли какое-либо преимущество в использовании

private static const

вместо

private const

для частных констант? Изменится ли это, если у вас есть только один экземпляр класса или несколько? Я подозреваю, что может иметь небольшое преимущество в памяти / производительности при использовании static, если у вас есть несколько экземпляров класса.

Ответы [ 3 ]

7 голосов
/ 30 июля 2010

Как указал mmsmatt, они сохраняют некоторую память. Однако обычно это не лучшее место для сохранения памяти. Вам лучше беспокоиться об утечках памяти, об эффективных форматах файлов и представлении данных в целом.

Недостатком статических констант является то, что весь глобальный доступ медленнее, чем локальный. instance.ident превосходит Class.ident. Запустите этот код для проверки:

package  {
    import flash.display.Sprite;
    import flash.text.TextField;
    import flash.utils.*;
    public class Benchmark extends Sprite {
        private static const delta:int = 0;
        private const delta:int = 0;        
        private var output:TextField;
        public function Benchmark() {
            setTimeout(doBenchmark, 1000);
            this.makeOutput();
        }
        private function doBenchmark():void {
            var i:int, start:int, sum:int, inst:int, cls:int;

            start = getTimer();
            sum = 0;
            for (i = 0; i < 100000000; i++) sum += this.delta;
            out("instance:", inst = getTimer() - start);

            start = getTimer();
            sum = 0;
            for (i = 0; i < 100000000; i++) sum += Benchmark.delta;
            out("class:", cls = getTimer() - start);

            out("instance is", cls/inst, "times faster");
        }   
        private function out(...args):void {
            this.output.appendText(args.join(" ") + "\n");
        }
        private function makeOutput():void {
            this.addChild(this.output = new TextField());
            this.output.width = stage.stageWidth;
            this.output.height = stage.stageHeight;
            this.output.multiline = this.output.wordWrap = true;
            this.output.background = true;          
        }       
    }
}
6 голосов
/ 30 июля 2010

private static const члены хранятся один раз для каждого типа.

private const члены хранятся один раз за экземпляр.

Так что да, вы экономите немного памяти.

0 голосов
/ 24 апреля 2015

Зависит от случая.

Как уже говорилось, static будет один раз для каждого типа, а non-static будет один раз для каждого экземпляра, поэтому это зависит от того, сколько экземпляров у вас будет.

Я говорю это, потому что если у вас есть компонент, который создается только один раз за раз (например, всплывающее окно с подсказкой), и вы полностью удаляете его из памяти после этого, то это означает, что в качестве статического вы используете ненужную память так как она никогда не исчезнет, ​​эта статическая переменная. Если у вас есть несколько экземпляров (таких как частицы или несколько окон), тогда да, лучше использовать static, потому что они будут использовать одну и ту же переменную.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...