2015-05-09 2 views
2

Я искал одноформатный формат, он очень похож на то, что я использовал раньше.N статических полей против одиночного статического экземпляра

Вопрос в том, есть ли разница между памятью и/или производительностью между этими двумя подходами, является ли второй вариант более быстрым, достаточным для того, чтобы скрыть его использование для записи и чтения?

Ниже приведен пример кода:

Метод 1

public static class TheSomething { 
    public static String Title; 
    public static String Description; 
    public static String HowIsIt; 
    public static int TimesSeenCount; 
    public static List<Long> PeopleWhoSawIt; 
    public static List<Session> PeopleSeeingIt; 

    // now some math mumbo jumbo just to increase the memsize of this: 
    public static double posX; 
    public static double posY 
    public static double posZ; 
    public static double velX; 
    public static double velY; 
    public static double velZ; 
    public static double accX; 
    public static double accY; 
    public static double accZ; 
    public static double rotX; 
    public static double rotY; 
    public static double rotZ; 
    public static double rotVelX; 
    public static double rotVelY; 
    public static double rotVelZ; 
    public static double rotAccX; 
    public static double rotAccY; 
    public static double rotAccZ; 
    public static List<Vertex> Geometry; 
} 

Для использования с:

++TheSomething.PeopleWhoSawIt; 

Способ 2

public static class TheSomething { 
    private static TheSomething _instance; 
    public static Instance { 
     get { 
      if(_instance == null) 
       _instance = new TheSomething(); 
     } private set { 
      _instance = value; 
     } 
    } 
    private TheSomething() {} 
    public String Title; 
    public String Description; 
    public String HowIsIt; 
    public int TimesSeenCount; 
    public List<Long> PeopleWhoSawIt; 
    public List<Session> PeopleSeeingIt; 

    // now some math mumbo jumbo just to increase the memsize of this: 
    public double posX; 
    public double posY 
    public double posZ; 
    public double velX; 
    public double velY; 
    public double velZ; 
    public double accX; 
    public double accY; 
    public double accZ; 
    public double rotX; 
    public double rotY; 
    public double rotZ; 
    public double rotVelX; 
    public double rotVelY; 
    public double rotVelZ; 
    public double rotAccX; 
    public double rotAccY; 
    public double rotAccZ; 
    public List<Vertex> Geometry; 
} 

Для использования с:

++TheSomething.Instance.PeopleWhoSawIt; 
+1

Это очень сложный вопрос, и мой ответ будет повторением того, что люди умнее меня уже сказали. Пожалуйста, прочитайте эту статью от SO-чемпиона Джона Скита [Реализация шаблона Singleton в C#] (http://csharpindepth.com/articles/general/singleton.aspx). – CrnaStena

+0

«это быстрее» - это то, на что можно ответить только _you_, запустив действительный тест производительности в реалистичных условиях, похожих на ваш реальный сценарий. Ваш пример не имеет большого смысла (увеличивая экземпляр «List '?), Но, если что-либо, я бы ожидал, что статический класс будет быстрее (возможно, какой-то несущественной или даже неизмеримой суммой), чем синглтон. В лучшем случае вопрос здесь слишком широк, и в худшем случае не содержит достаточной информации для тех, кто может ответить на него по вашему конкретному сценарию. –

ответ

1

С точки зрения производительности ни один из вариантов предоставит Вам существенное улучшение. Они попадают в диапазон микро-оптимизаций, которые не будут сильно влиять (если таковые имеются) на реальный сценарий.

С точки зрения дизайна оба варианта довольно плохие, причем первая из них особенно зла. В общем, шаблон singleton нахмурился, поскольку разработчики склонны злоупотреблять и игнорировать различные побочные эффекты, связанные с ним, например, удерживать память или ресурсы или не поддерживать многопоточность.

Если вам по-прежнему требуется один экземпляр для этого класса, попробуйте изучить использование контейнера для впрыска зависимостей, а не сконструировать сам класс как одноэлементный.

+0

Да, в конце концов мне нужны некоторые классы, чтобы «просто выполнить материал» или «просто сохранить этот единственный фрагмент общедоступной информации», например, например, System.Convert, но мне также может потребоваться сохранить некоторые значения в этих классах, чтобы обе эти примеры подходят для этой цели. Предполагая, что нет разницы в производительности, я бы предположил, что первая модель (часто даже используемая самой картой), похоже, будет лучше соответствовать. И согласился, что я не вижу веских оснований использовать синглтон. Спасибо за информацию, с нетерпением жду зависимости от инъекции. – Felype

Смежные вопросы