Влияние переменной области на производительность? (С #) - PullRequest
3 голосов
/ 05 октября 2009

Предположим, что у нас есть 3 класса:

Place, Contact, PhoneNumber классов.

В классе Place я хочу иметь класс Contact, но лучше держать класс PhoneNumber в классе Contact. Таким образом, в классе Place более логично достичь PhoneNumber, сначала получив объект Contact, а затем PhoneNumber под объектом Contact.

Если мне часто нужно получить объект PhoneNumber из объекта place, хранение класса PhoneNumber в классе Contact (Place.Contact.PhoneNumber) вместо прямой вставки этого объекта в класс Place (Place.Contact) вызывает любую проблемы с производительностью?

Почему я задаю этот вопрос, так это то, что такого рода проблемы с областями видимости сильно влияют на производительность в JavaScript. Стоит ли быть таким параноиком по поводу отношения переменной области - производительности в C #?

Спасибо.

Ответы [ 3 ]

4 голосов
/ 05 октября 2009

В C # вы не увидите много проблем с производительностью, связанных с тривиальными * получателями и установщиками свойств, подобными этому. Однако без профилирования невозможно сказать, будет ли это проблемой для вас.

В большинстве случаев конструкции графов объектов никогда не создают проблем с производительностью в C #, как в JavaScript.


* Свойства, которые просто возвращают ссылку на существующий объект и не имеют никакой дополнительной логики.

2 голосов
/ 05 октября 2009

Это повлияет на производительность, но не вызовет проблем. Компилятор Just-in-Time компилирует доступ к элементу в вычисления прямого указателя (вычисляя макет каждого класса при загрузке сборки), поэтому доступ к элементу намного быстрее в C #, чем в JavaScript.

1 голос
/ 05 октября 2009

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

Чтобы ответить на ваш вопрос в первую очередь, да, это может повлиять на производительность кода. Код для чтения ref.ref.prop потребует чуть больше кода, чем ref.prop, очевидно.

Однако это окажет очень небольшое влияние на производительность кода, и если вы не читаете это свойство 2, много-много раз нивелируете в цикле, и мало что еще полезно, эффект наличия 1 или 2 уровня в этом конкретном сценарии будут затенены любым другим кодом, который вы можете выполнять.

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

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

...