Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
23 / 23 / 4
Регистрация: 19.04.2010
Сообщений: 50

Ускорить работу по сети (запрашиваем IP и пинг, потом HostName)

28.01.2011, 18:38. Показов 2310. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем добрый вечер) Изучаю я C# и потихоньку пытаюсь на нём что то написать, вот получился такой код(Он наверно бредовый и содержит что то лишнее, но я только учусь)
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
        public void SkanIP(object ipaddres)
        {
            lock (this)
            {
                IPClass IPClassAddres = new IPClass();
                IPClassAddres = (IPClass)ipaddres;
 
                Ping pingSender = new Ping();
                PingOptions pingOptions = new PingOptions();
                byte[] bytes = new byte[32];
                pingOptions.DontFragment = true;
                pingOptions.Ttl = 30;
 
                PingReply pingReply = pingSender.Send(IPClassAddres.IPAddres, 200, new byte[32], pingOptions);
 
                if (pingReply.Status == IPStatus.Success)
                {
                    //Имя хоста
                    string host = "X Z";
 
                    bool SNMP=false;
 
                    //Пробуем получить имя, если недоступно то присвоим дефолтное
                    try
                    {
                        host = Dns.GetHostEntry(pingReply.Address).HostName;
                    }
                    catch (Exception e) { }
 
                    //Пробуем определить поддерживает ли объект SNMP если нет то FALSE
                    try
                    {
                        SNMPObject ob = new SNMPObject("1.3.6.1.2.1.1.5.0");
                        string agent = ob.getSimpleValue(new SNMPAgent(IPClassAddres.IPAddres));
                        MessageBox.Show("asdasdas");
                        SNMP = true;
                    }
                    catch (Exception e) { }
 
                    //Записываем полученую информацию в коллекцию
                    AddFigure<KompMap>(IPClassAddres.IPAddres, (int)pingReply.RoundtripTime, host, true,SNMP);
 
                    //Обновляем DataGrid
                    if (addDataGrid != null)
                    {
                        string[] s = { IPClassAddres.IPAddres, host, pingReply.RoundtripTime.ToString(),string.Format("{0}",SNMP) };
                        addDataGrid(s);
                    }
                    //Обновляем значение TextBoxa
                    if (addTextBox != null)
                    {
                        string s = String.Format("{0}.{1}.{2}.{3}", IpMapClass.StartOne, IpMapClass.StartTwo, 
                            IpMapClass.EndThree,IpMapClass.StartFour);
                        addTextBox(s);
                    }
                }
                //Если по какой то причине данные о IP не были получены прибавить 1 в последней цифре 
                //IP адреса и сканировать заново
                else
                {
                    IpMapClass.StartFour += 1;
                    SortIP();
                    //Обновляем значение TextBoxa
                    if (addTextBox != null)
                    {
                        string s = String.Format("{0}.{1}.{2}.{3}", IpMapClass.StartOne, IpMapClass.StartTwo,
                            IpMapClass.EndThree, IpMapClass.StartFour);
                        addTextBox(s);
                    }
                }
                //Если последние цифры начального и конечного адреса совпадают то сканирование                      закончено и кнопки на форме разблокируются
                if (IpMapClass.StartFour == IpMapClass.EndFour)
                {
                    LockButtonIndex = 0;
                }
            }
        }
Собственно нужен совет как можно ускорить работу такого метода, получается что сначала запрашиваем IP и пинг, потом HostName и потом проводим проверку на поддержку SNMP, получается блин 3 запроса, а это долго. Потому что этот метод сканирует некоторый диапазон IP заданный пользователем, получается что если поставил 100 адресов то можно идти за чаем, хочется как то ускорить) Может есть какие нибудь предложения?)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.01.2011, 18:38
Ответы с готовыми решениями:

Ускорить работу макроса
Как ускорить работу скрипта? Sub test() Dim arr1() Application.ScreenUpdating = False 'range и массив рабочей книги ...

Ускорить работу кода
Привет всем, Столкнулся с такой проблемой, что мне нужно, что бы код находил нужную ячейку и удалял всю строку со смещением вверх...

Ускорить работу с Excel
Excel.Application xlApp = new Excel.Application(); //Excel xlApp.ScreenUpdating = false; Excel.Workbook xlWB;...

10
20 / 20 / 2
Регистрация: 27.08.2009
Сообщений: 71
28.01.2011, 20:00
Например try попробывать без него... а все ошибки исключить if...
0
Кодило
 Аватар для r0fL
251 / 179 / 23
Регистрация: 25.11.2009
Сообщений: 685
28.01.2011, 23:57
Код не смотрел, но можно делать все в несколько потоков, например.
0
 Аватар для Mikant
1322 / 995 / 127
Регистрация: 08.12.2009
Сообщений: 1,299
29.01.2011, 03:10
1) lock(this) старайся (, по возможности,) никогда не использовать - создай отдельно какой-нибудь
C#
1
private readonly object _PingSyncLock = new object();
и лочь его, но только там, где надо! а не на весь метод
2) все try-catch замени на if-else : они тут совсем не нужны, только логику нарушают (хотя производительности тебе это существенно не прибавит)
3) pingSender, pingOptions, bytes (который у тебя ваще не используется, почему-то вместо него в ping проходит new byte[32] - то есть НОВЫЙ) и прочее, можно перенести из локальных переменных на уровень вверх (сделать полями класса) - ибо не надо новые экземпляры плодить просто так
4) addDataGrid, addTextBox, SortIP() - это всё для графики (тем более мне почему-то кажется, что первые 2 - вообще события только какие-то совсем неправильные), а графики в методе, который будет использован в различных потоках НЕТ места - делай в крайнем случае одно событие обновления всего в конце метода - и потом уже в его обработчике BeginInvoke
1
Заблокирован
29.01.2011, 21:55
Цитата Сообщение от kosiakos Посмотреть сообщение
catch (Exception e) { }
Объявлена переменная, которую ты не используешь. Тогда уже пиши вот так
C#
1
catch { }
0
23 / 23 / 4
Регистрация: 19.04.2010
Сообщений: 50
29.01.2011, 22:41  [ТС]
Спасибо всем кто откликнулся) Но немного непонятен вот этот фрагмент
" все try-catch замени на if-else : они тут совсем не нужны, только логику нарушают"

Можете если не сложно объяснить мне как например вот так заменить
C#
1
2
3
4
5
try
  {
   host = Dns.GetHostEntry(pingReply.Address).HostName;
  }
catch { }
Тут получается следующее - если я уберу блок Try Сatch программа часто будет вылетать с таким исключением:
"Затребованное имя допустимо и оно найдено в базе данных,но для имени отсутствуют связанные с ним данные, которые были разрешены для него", можно ли как то с этим бороться?)
0
Заблокирован
29.01.2011, 22:53
Насколько я знаю, блоки try-catch в Шарпе ни как не влияют на производительность.
0
 Аватар для m0nax
1274 / 975 / 113
Регистрация: 12.01.2010
Сообщений: 1,971
30.01.2011, 00:22
SSV, Сами по себе блоки не влияют, а вот исключения влияют очень сильно
попробуй сделать какой-нибудь цикл без исключений, а потом с ними - разница будет в секундах
0
42 / 42 / 9
Регистрация: 27.06.2010
Сообщений: 91
30.01.2011, 12:45
SNMPObject ob = new SNMPObject("1.3.6.1.2.1.1.5.0");
try
{

string agent = ob.getSimpleValue(new SNMPAgent(IPClassAddres.IPAddres));
}
catch () { }

MessageBox.Show("asdasdas");
SNMP = true;

и вообще TRY относительно затратнно.

Много поточность всё изменит !
0
69 / 3 / 1
Регистрация: 01.06.2011
Сообщений: 8
12.10.2011, 09:52
Я сейчас как раз разбираюсь с SNMP подскажи плз какие библиотеки ты используешь?
0
5 / 0 / 0
Регистрация: 15.12.2011
Сообщений: 3
08.08.2012, 13:07
http://csharpsourescode.blogsp... label/SNMP
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.08.2012, 13:07
Помогаю со студенческими работами здесь

Ускорить работу методов
Здравствуйте, есть два метода, которые ну очень медленно работают при key = 1000 и более... Как ускорить работу с минимальными потерями? ...

Ускорить работу с файлом
Программа создает sitemap.xml файл для индексации поисковиками. Работает ну очень долго. Помогите ускорить. a = примерно 25000 ...

ускорить работу скрипта
Друзья - php скрипт выполняется более 400 секунд! Подскажите что можно подправить - что бы ускорить работу! &lt;?php $dbh =...

Ускорить работу интерпретатора
Очень тяжелый скрипт на 2 часа при работе загружает проц только на 10-15%. Есть ли какие-то настройки для apache или php чтобы отдать...

Ускорить работу WebBrowser
У меня есть WebBrowser, который загружает страницу и вынимает от туда текст, ну а затем работает с ним. Мне не нужно графическое оформление...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru