Используя пользовательские счетчики производительности через appdomain перерабатывает

Почему ваш метод внешнего обмена цикличен? Почему бы вам не выполнить этот код один раз? Разве это не должно быть обработано с помощью обычной рекурсии, как и другие операции на дереве? И почему в этом методе вы оба вызываете root.swapChildren (), а затем также меняете местами дочерние элементы root в этом методе?

Разве вы просто не хотите этого?:

public class BinaryTree {
    ...
    public void swapChildren() {
        root.swapChildren();
    }
    ....
    class Node {
        ...
        public void swapChildren() {
            if (right != null)
                right.swapChildren();
            if (left != null)
                left.swapChildren();
            Node toBeRight = left;
            Node toBeLeft = right;
            left = toBeLeft;
            right = toBeRight;
        }
        ...
    }
   ...
}
5
задан SharpC 25 June 2019 в 14:25
поделиться

4 ответа

IIRC, IIS не будет следить за тем, чтобы ваш первый домен приложения был закрыт до того, как он запустит второй, особенно когда вы его повторно используете вручную или автоматически. Я считаю, что когда запускается перезапись, сначала создается второй домен приложения, и как только это удается, к нему направляются новые входящие запросы, а затем IIS ждет, пока первый домен приложения (тот, который отключается) завершит обработку любых запросов, которые он имеет.

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

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

Это процедура, которая у меня есть для создания имени экземпляра:

    private static string GetFriendlyInstanceName()
    {
        string friendlyName = AppDomain.CurrentDomain.FriendlyName;
        int dashPosition = friendlyName.IndexOf('-');
        if (dashPosition > 0)
        {
            friendlyName = friendlyName.Substring(0, dashPosition);
        }
        friendlyName = friendlyName.TrimStart('_');
        string processID = Process.GetCurrentProcess().Id.ToString();
        string processName = Process.GetCurrentProcess().ProcessName;
        string instanceName = processName + " " + processID + " " + friendlyName.Replace('/', '_').Trim('_').Trim();
        return instanceName;
    }
2
ответ дан 14 December 2019 в 09:03
поделиться

Я не эксперт с пользовательскими счетчиками, но на основе информации Вы, если, я думаю, что это - стоящее того, чтобы попытаться рассмотрение возможности некоторого кода, пытающегося использовать счетчики, когда добавить домен собирается быть переработанным. Ищите использование счетчика в чем-либо связанном для расположения или деструктор.

0
ответ дан 14 December 2019 в 09:03
поделиться

При создании счетчиков производительности лениво это могла бы быть проблема поточной обработки. После процесса перерабатывают, если бы хиты на две страницы происходят одновременно (который не удивил бы меня действительно), затем, Ваш вызов создания производительности мог работать многократно. С одной стороны можно безопасно проигнорировать эту ошибку. Но если Вы хотите к elminate это, я предлагаю, чтобы Вы перенесли свое остроумие генерации кода счетчика производительности оператор блокировки такой как

lock (this.lockObject)
{
 //Create performance counter
}
0
ответ дан 14 December 2019 в 09:03
поделиться

У меня была аналогичная проблема: Многоэкземплярные счетчики Process LifeTime нельзя было создать более одного раза в Visual Studio, но это было связано с тем, что у меня был открыт PerfMon!

Мне потребовалось время, чтобы понять это.

0
ответ дан 14 December 2019 в 09:03
поделиться
Другие вопросы по тегам:

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