Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.01.2016, 09:50   #1
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,949
По умолчанию Трафик

Здравствуйте!

Дан фрагмент
Код:
type
  TMibIfRow = packed record
    wszName:array[0..255] of WideChar;
    dwIndex:DWORD;
    dwType:DWORD;
    dwMtu:DWORD;
    dwSpeed:DWORD;
    dwPhysAddrLen:DWORD;
    bPhysAddr:array[0..7] of Byte;
    dwAdminStatus:DWORD;
    dwOperStatus:DWORD;
    dwLastChange:DWORD;
    dwInOctets:DWORD;
    dwInUcastPkts:DWORD;
    dwInNUCastPkts:DWORD;
    dwInDiscards:DWORD;
    dwInErrors:DWORD;
    dwInUnknownProtos:DWORD;
    dwOutOctets:DWORD;
    dwOutUCastPkts:DWORD;
    dwOutNUCastPkts:DWORD;
    dwOutDiscards:DWORD;
    dwOutErrors:DWORD;
    dwOutQLen:DWORD;
    dwDescrLen:DWORD;
    bDescr:array[0..255] of Char;
  end;
  PTMibIfTable = array[0..512] of TMibIfRow;
  TMibIfTable = packed record
    dwNumEntries:DWORD;
    Table:PTMibIfTable;
  end;

function GetIfTable(pIfTable:PTMibIfTable;pdwSize:PULONG;bOrder:boolean):
   DWORD; stdcall; external 'IPHLPAPI.DLL';
...

var MibIf:PTMibIfTable;
    P:Pointer;
    i,j,l,c:integer;
    s:string;
begin
   c:=sizeof(MibIf);
   P:=@MibIf;
   If GetIfTable(MibIf,@c,false)<>0 then
      Exit;
   c:=TMibIfTable(P^).dwNumEntries;//всего 47 подключений
   For i:=0 to c-1 do
   begin
      ...  
   end;
end;
С помощью кода я подсчитываю трафик на делфи.
Почему функция GetIfTable работает медленно (примерно 0,5-1 сек)? Есть ли способ устранить такое "зависание"? Или посоветуйте какой-нибудь другой аналогичный код.

Заранее спасибо!

[Источник: http://iantonov.me/page/pishem-programmu-dlja-podscheta-trafika-na-delphi]
Вложения
Тип файла: rar Интернет трафик.rar (3.5 Кб, 15 просмотров)
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]
newerow1989 вне форума Ответить с цитированием
Старый 07.01.2016, 10:52   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А ты уверен что проблема именно в ней? Ты замерял тики?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.01.2016, 10:58   #3
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,949
По умолчанию

Уверен! Сначала пошагово обнаружил, потом измерял
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]
newerow1989 вне форума Ответить с цитированием
Старый 07.01.2016, 13:39   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну... Я думаю никак, можешь разве что потоки использовать и вместо StringGrid подключить DrawGrid, чтоб не переобновлять весь грид, а только его видимую часть.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.01.2016, 13:45   #5
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,949
По умолчанию

StringGrid обновляется около 0,01 сек. - не то!
GetIfTable долго работает! - эту часть надо как-то ускорить!
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]
newerow1989 вне форума Ответить с цитированием
Старый 07.01.2016, 21:26   #6
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Этож системная DLL.

137.png

Обратись в microsoft с претензиями.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 08.01.2016, 10:20   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
эту часть надо как-то ускорить!
Я бы на твоем месте в MSDN поискал функцию из той группы, которая возвращает данные по конкретному интерфейсу, указав его номер. Тогда бы сделал треаду, в которой грид бы построчно обновлял. может так будет быстрее, всетки GetIfTable() собирает всю инфу.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Трафик zumm Компьютерное железо 3 19.11.2011 15:40
трафик Virus191288 Общие вопросы Delphi 1 09.08.2009 10:49
Трафик Witaliy Общие вопросы Delphi 3 03.05.2008 13:03