consoleapplication1.exe_p1121_r15_ad1 -- что это?
От: 0K Ниоткуда  
Дата: 02.10.10 23:23
Оценка:
Собственно, нужно добавить PerformanceCounter для отслеживания сетевой активности процесса (использую ".NET CLR Networking 4.0.0.0"). InstanceName моего процесса называется так: consoleapplication1.exe_p1121_r15_ad1. Опытным путем установлено, что p1121 -- это PID (номер процесса) и оно все время меняется. Т.е. если записать так:

"consoleapplication1.exe_p" + Process.GetCurrentProcess().Id + "_r15_ad1";


,то вроде бы работает.

Но остается вопрос: что за r15 и ad1???

ad1, я так подозреваю, номер AppDomain? А r15?

Ну и главное. Как мне получить InstanceName правильно, дабы не возникло проблем если я буду использовать 2 AppDomain и 10 потоков? Писать string.Format или есть более приличный вариант?
Re: consoleapplication1.exe_p1121_r15_ad1 -- что это?
От: Аноним  
Дата: 03.10.10 06:03
Оценка:
Здравствуйте, 0K, Вы писали:

0K>Ну и главное. Как мне получить InstanceName правильно, дабы не возникло проблем если я буду использовать 2 AppDomain и 10 потоков? Писать string.Format или есть более приличный вариант?


Можно глянуть как MS его получает через рефлектор. Класс System.Net.NetworkingPerfCounters в сборке System и метод GetInstanceName.
В целом этот метод можно вызвать через reflection, а можно просто взять код который там написан (тем более, что VersioningHelper.MakeVersionSafeName — публичный метод)

Как нормально получить instance — мне не известно
Re[2]: consoleapplication1.exe_p1121_r15_ad1 -- что это?
От: 0K Ниоткуда  
Дата: 03.10.10 07:36
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Можно глянуть как MS его получает через рефлектор. Класс System.Net.NetworkingPerfCounters в сборке System и метод GetInstanceName.

А>В целом этот метод можно вызвать через reflection, а можно просто взять код который там написан (тем более, что VersioningHelper.MakeVersionSafeName — публичный метод)

Да, действительно. Спасибо (жалко под Анонимом).

Пока буду использовать это:



string str = ReplaceInvalidChars(AppDomain.CurrentDomain.FriendlyName);
            string str2 = VersioningHelper.MakeVersionSafeName(string.Empty, ResourceScope.Machine, ResourceScope.AppDomain);
            string str3 = str + str2;
            if (str3.Length > 0x7f)
            {
                str3 = str.Substring(0, 0x7f - str2.Length) + str2;
            }
            
            Console.WriteLine(str3);

private static string ReplaceInvalidChars(string instanceName)
{
    StringBuilder builder = new StringBuilder(instanceName);
    for (int i = 0; i < builder.Length; i++)
    {
        switch (builder[i])
        {
            case '/':
            case '\\':
            case '#':
                builder[i] = '_';
                break;

            case '(':
                builder[i] = '[';
                break;

            case ')':
                builder[i] = ']';
                break;
        }
    }
    return builder.ToString();
}


А>Как нормально получить instance — мне не известно


В MSDN ничего об этом нет. Правда упомянули что символы нужно заменить (функция выше). Пока буду использовать вариант выше.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.