Собственно, нужно добавить 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 или есть более приличный вариант?
Здравствуйте, 0K, Вы писали:
0K>Ну и главное. Как мне получить InstanceName правильно, дабы не возникло проблем если я буду использовать 2 AppDomain и 10 потоков? Писать string.Format или есть более приличный вариант?
Можно глянуть как MS его получает через рефлектор. Класс System.Net.NetworkingPerfCounters в сборке System и метод GetInstanceName.
В целом этот метод можно вызвать через reflection, а можно просто взять код который там написан (тем более, что VersioningHelper.MakeVersionSafeName — публичный метод)
Как нормально получить instance — мне не известно
Здравствуйте, Аноним, Вы писали:
А>Можно глянуть как 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 ничего об этом нет. Правда упомянули что символы нужно заменить (функция выше). Пока буду использовать вариант выше.