постоянная строка внутри функции

#c# #.net #xna

#c# #.net #xna

Вопрос:

Фрагмент из учебного каталога Mricrosoft XNA:

     /// <summary>
    /// Draws the control, using SpriteBatch and SpriteFont.
    /// </summary>
    protected override void Draw()
    {
        const string message = "Hello, World!n"  
                               "n"  
                               "I'm an XNA Framework GraphicsDevice,n"  
                               "running inside a WinForms application.n"  
                               "n"  
                               "This text is drawn using SpriteBatch,n"  
                               "with a SpriteFont that was loadedn"  
                               "through the ContentManager.n"  
                               "n"  
                               "The pane to my right contains an"  
                               "spinning 3D triangle.";

        GraphicsDevice.Clear(Color.CornflowerBlue);

        spriteBatch.Begin();
        spriteBatch.DrawString(font, message, new Vector2(23, 23), Color.White);
        spriteBatch.End();
    }
  

Draw вызывается 60 раз в секунду. Есть ли какие-либо накладные расходы на производительность при назначении сообщения внутри чертежа? Это то же самое, как если бы я переместил ее в статический вспомогательный класс? Насколько я помню, выражение стоимости вычисляется компилятором C #. Что здесь изменить модификатор const?

Ответ №1:

Значение const вычисляется только один раз. Вы ничего не получите, переместив ее в статическую переменную.

Комментарии:

1. это то же самое для const string message и string message?

2. строковое сообщение выделит локальную переменную стека, инициализированную для указания на строковую константу (выражение справа в любом случае является строковой константой). Накладные расходы немного выше, чем у const string , но также const доступен только для чтения, тогда как локальная строка — нет, поэтому логически лучше использовать const для всех констант .

Ответ №2:

Нет, все это оптимизировано для вас.