IIS 6 регистрирует M.I.A

В некоторых случаях это является устаревшим из-за оптимизаций, выполненных компилятором, но общий вопрос то, что код как:

string myString="";
for(int i=0;i<x;i++)
{
    myString += "x";
}

будет действовать как ниже (каждый шаг, являющийся следующим повторением цикла):

  1. создают строковый объект из длины 1 и оценивают "x"
  2. , Создают новый строковый объект размера 2, копируют старую строку "x" в него, добавляют, что "x" в положении 2.
  3. Создают новый строковый объект размера 3, копируют старую строку "xx" в него, добавляют "x" в положении 3.
  4. ... и так далее

, Как Вы видите, каждое повторение должно скопировать еще один символ, приводящий к нам работающий 1+2+3+4+5 +... +N операции каждый цикл. Это - O (n^2) операция. Если бы однако мы знали заранее, что нам только были нужны символы N, мы могли сделать это в единственном выделении с копией просто символов N от строк, которые мы использовали - простой O (n) операция.

StringBuffer/StringBuilder избегают этого, потому что они изменяемы, и так не должны продолжать копировать те же данные много раз (пока существует пространство для копирования в в их внутреннем буфере). Они стараются не выполнять выделение и копируют пропорциональный количеству, добавляет сделанный over-allocing, их буфер пропорцией его текущего размера, давая амортизировал O (1) добавление.

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

8
задан SliverNinja - MSFT 13 June 2013 в 13:17
поделиться

2 ответа

Хорошо, мне пришлось установить флажок «Журнал посещений» на вкладке «Домашний каталог» при просмотре диалогового окна свойств веб-сайта в IIS.

5
ответ дан 5 December 2019 в 23:15
поделиться

Когда вы используете ключевое слово var в параметрах, это делает переданное значение новым var в классе. Когда вы этого не делаете, он делает его параметром конструктора (только), и вы используете его значение для var , передавая его конструктору. Таким образом, пример, приведенный людьми

class B(val name:String, updateCount:Int) extends A(updateCount)

, верен.

Однако scala делает параметры конструктора напрямую доступными для методов в классе (я не уверен, почему), поэтому, если вы используете то же имя, вы обнаружите, что ваш код не может быть скомпилирован с ошибкой переназначение на val при попытке переназначить "var". Например, в следующем фрагменте неизменяемый параметр конструктора затеняет унаследованный var , поэтому вы не можете назначить его параметру. Как насчет поиска всего, что заканчивается на .log? Или в нем есть w3svc?

0
ответ дан 5 December 2019 в 23:15
поделиться
Другие вопросы по тегам:

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