@daniil14056

WPF. Сказываются ли на производительности, длинны строк имен элементов?

Хочу разобраться, в позднем связывание, что это такое, или понять, на каком этапе что делается. Зачем, и каким образом.
<Button Click="aaaaaaaaaaaaaaaaaaaaa_over100500aaaaaaa" 
 Name="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"/>

Сказывается ли на производительности длинные имена, названий функций?
Или только на этапе компиляции?
Почему много где, где есть ограниченный словарь имен, параметры передаются как строки? А не как индексы? (или они где-то там глубоко при компиляции все-таки заменяются. и мне не нужно волноваться)
Много где, но подзабыл примеры, например Через ресурсы ResourceManager, Resources//// из словаря.
Resources.GetString("key_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");

Зачем искать по String ключу? Если на этапе компиляции, словарь известен, и можно попытаться составить из него Enum, или массив[index]=key? И передавать эти индексы, вместо string, которую каждый раз надо создавать, проверять итд?
Да. Насчет ресурсов, там бывает, добавляются поля, с именем свойств, и это уже мгновенный доступ.

В Property Binding к примеру передаются имена свойств полей, пути, ключей.... Тогда как все можно изменить на индексы или адреса в памяти куда,(точнее на этапе сборки компилятор может заменить).
Зачем каждый раз по char читать, и сравнивать там Text"{Binding a,UpdateSourceTrigger= UpdateOnPropertyChanged}"?
Или там при создании анимации в .cs коде. Зачем прописывать имя свойства, например зачем писать Opacity, Width Color....? Типа вот идет исполнение кода, или такого нету, она встречает, связать это, и читает по байтам O p a c м i t y делая 7 проверок в цикле, что бы потом получить адрес или смещение поля в памяти... И так каждый раз. Тогда как можно же сразу передать туда то что надо. И не знать про название свойства.
Не знаю как объяснить, можно ли сделать, так что бы при компиляции, строковое значение, изменилось на индексовое?
Dictionary<string, string> resources;
        string[] indexesResources;  
        void init()
        {
            int i = 0;
            foreach (var item in resources)
            {
                indexesResources[i++] = item.Value;
            }
        }
        string get(int index) => indexesResources[index];
        string get(string key) => resources[key];
       
        /// *****************************************
        void userFunc()
        {
            var v = get("Понятный_ключ_при _написание_кода"); // <- get(index)
              // можно ли изменить строку выше на  get(generation_index)  что ускорит в 10 раз поиск
        }

можно ли изменить строку выше на get(index), На этапе компиляции? Ведь такое точно можно. Как минимум распарить документ, и поменять. Или еще как.

из случайного примера
Rectangle myRectangle = new Rectangle();

// Assign the Rectangle a name so that
// it can be targeted by a Storyboard.
this.RegisterName(
    "fromToAnimatedRectangle", myRectangle);

// Demonstrates the From and To properties used together.
// Animates the rectangle's Width property from 50 to 300 over 10 seconds.
DoubleAnimation myDoubleAnimation = new DoubleAnimation();
myDoubleAnimation.From = 50;
myDoubleAnimation.To = 300;
myDoubleAnimation.Duration =
    new Duration(TimeSpan.FromSeconds(10));

Storyboard.SetTargetName(myDoubleAnimation, "fromToAnimatedRectangle");
Storyboard.SetTargetProperty(myDoubleAnimation,
    new PropertyPath(Rectangle.WidthProperty));
Storyboard myStoryboard = new Storyboard();
myStoryboard.Children.Add(myDoubleAnimation);

А что если там имя написать из миллиона символов(не могут проверить, зависает).
То что, когда код будет исполнятся он будет читать это имя, потом сравнивать его еще. Если опять же можно заменить все Counter индексом каким-то глобальным. На этапе компиляции.
  • Вопрос задан
  • 75 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы