Какой порядок времени занимает свойство .NET System.String.Length?

Возможно, вы сможете использовать методы requestFullScreen (), как описано в https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Using_full_screen_mode .

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

function toggleFullScreen() {
  if (!document.fullscreenElement &&    // alternative standard method
      !document.mozFullScreenElement && !document.webkitFullscreenElement && !document.msFullscreenElement ) {  // current working methods
    if (document.documentElement.requestFullscreen) {
      document.documentElement.requestFullscreen();
    } else if (document.documentElement.msRequestFullscreen) {
      document.documentElement.msRequestFullscreen();
    } else if (document.documentElement.mozRequestFullScreen) {
      document.documentElement.mozRequestFullScreen();
    } else if (document.documentElement.webkitRequestFullscreen) {
      document.documentElement.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT);
    }
  } else {
    if (document.exitFullscreen) {
      document.exitFullscreen();
    } else if (document.msExitFullscreen) {
      document.msExitFullscreen();
    } else if (document.mozCancelFullScreen) {
      document.mozCancelFullScreen();
    } else if (document.webkitExitFullscreen) {
      document.webkitExitFullscreen();
    }
  }
}

toggleFullScreen();

Это позволяет странице активировать полноэкранный режим и может быть активирован с помощью загрузки страницы на javascript стр. Тем не менее, поддержка старых браузеров отсутствует.

13
задан Matthew 15 May 2010 в 04:44
поделиться

6 ответов

Это плохой совет - String.Length действительно O (1). Это не похоже на strlen в C.

По общему признанию, это не гарантировано в документах , насколько я могу судить, но неизменность строк делает его довольно глупая вещь не , чтобы сделать O (1). (И не только O (1), но и очень быстрое постоянное время).

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

23
ответ дан 1 December 2019 в 19:39
поделиться

String.Length - O (1). Причина, по которой люди говорят вам не вызывать его в цикле, заключается в том, что это доступ к свойству, который аналогичен вызову метода. В действительности один дополнительный вызов метода редко имеет какое-либо существенное значение.

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

5
ответ дан 1 December 2019 в 19:39
поделиться

Согласно внутренним комментариям, свойство String.Length - это единственная инструкция, которая не запускает цикл for. Следовательно, это операция O(1).

0
ответ дан 1 December 2019 в 19:39
поделиться

Вспомните, что строки неизменяемы. System.String.Length никогда не меняется.

3
ответ дан 1 December 2019 в 19:39
поделиться

Нет, не пересчитывается. Тип строки неизменяемый.

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

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

1
ответ дан 1 December 2019 в 19:39
поделиться

Как уже говорили другие, String.Length является постоянным свойством. Если вы действительно заботитесь о производительности (или имеете значительные итерации), вы можете присвоить ее значение локальной целочисленной переменной один раз и прочитать это много раз (в цикле и т. Д.). Это даст оптимизатору больше шансов выделить это значение в регистр ЦП. Доступ к свойству - намного более дорогостоящая операция, чем к переменной стека или регистру.

2
ответ дан 1 December 2019 в 19:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: