🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.objects
6 messages
6 total messages Started by mykey Mon, 22 Nov 2004 22:11
Darmowy profilator kodu na stronie...
#11918
Author: mykey
Date: Mon, 22 Nov 2004 22:11
1 lines
985 bytes
http://www.mnakiewicz.webpark.pl/tprofilator/tprofilator.html 
Re: Darmowy profilator kodu na stronie...
#11919
Author: Filip Sielimowicz
Date: Wed, 24 Nov 2004 11:43
58 lines
3101 bytes
Użytkownik "mykey" <BEZ_TEGOm.nakiewicz@sigma.rpl.pl> napisał w wiadomości
news:cnto77$6t6$1@atlantis.news.tpi.pl...
> http://www.mnakiewicz.webpark.pl/tprofilator/tprofilator.html

Trochę to NTG, ale warto zauważyć, że, skoro już kod jest w C++
to warto może wykorzystać fakt, że lokalne obiekty są automatycznie
usuwane w momencie wychodzenia z sekcji, w której zostały
zadeklarowane. Czyli jest wywoływany kod konstruktora.

Oznacza to, że można sprytnie zlikwidować konieczność otaczania
każdej sekcji z pomiarem czasu oddzielnie beginem i endem, zostawiając
jedynie namiastkę begin'a.

Kod postaci:
void Funkcja1(){

   TProfilator::Begin("Funkcja1");
       ...
       Kod funkcji
       ...
   TProfilator::End("Funkcja1");
}

można zastąpić:

void Funkcja1(){
   TProfilatorHelper prof("Funkcja1");
       ...
       Kod funkcji
       ...
}

Definicja klasy TProfilatorHelper: powinna w konstruktorze
robić TProfilator::Begin a w destruktorze TProfilator::End ;)

Dawno w C++ nie siedziałem, więc kodu tu nie wyprodukuję,
ale onegdaj wielokrotnie wykorzystywałem tę cechę właśnie
do monitoringu czasów, debugowania, czy też tworzenia bezpiecznych
sekcji krytycznych (destruktor zdejmuje semafor). Kiedyś też
przydało się to w implementacji protokołu ICQ, w którym
przy tworzeniu pakietów danych trzeba struktury poprzedzać
ich rozmiarami, a często w momencie rezerwowania miejsca
na zapisanie rozmiaru jeszcze nie jest on znany a struktura dopiero
w mozole powstaje. Rozmiar był zapisywany automatycznie
przy wychodzeniu z sekcji krytycznej na podstawie różnicy
bieżącego wskaźnika pozycji w buforze i pozycji, która była
zapamiętana w momencie konstrukcji obiektu pilnującego rozmiaru.
Ale nie ważne, za bardzo się zagłębiam ...

Warto zauważyć, że w przypadku C++ (zupełnie nie da się tego
stosować np. w Javie) taka konstrukcja obiektu nie wiąże się
z alokacją pamięci - obiekt jest tworzony na stosie. Jest to więc
konstrukcja bardzo efektywna - daje minimalny narzut pracy,
co przy mierzeniu czasów jest bardzo istotne.

Filip Sielimowicz
http://panda.bg.univ.gda.pl/~sielim/kule.htm
Re: Darmowy profilator kodu na stronie...
#11920
Author: mykey
Date: Tue, 30 Nov 2004 21:32
65 lines
3541 bytes
Dzięki za radę. To ciekawy pomysł. Mam pytanie co to znaczy NTG bo jestem 
początkującym grupowiczem.

Użytkownik "Filip Sielimowicz" <sielim@poczta.onet.pl> napisał w wiadomości 
news:co1s50$d4l$1@news.onet.pl...
>
> Użytkownik "mykey" <BEZ_TEGOm.nakiewicz@sigma.rpl.pl> napisał w wiadomości
> news:cnto77$6t6$1@atlantis.news.tpi.pl...
>> http://www.mnakiewicz.webpark.pl/tprofilator/tprofilator.html
>
> Trochę to NTG, ale warto zauważyć, że, skoro już kod jest w C++
> to warto może wykorzystać fakt, że lokalne obiekty są automatycznie
> usuwane w momencie wychodzenia z sekcji, w której zostały
> zadeklarowane. Czyli jest wywoływany kod konstruktora.
>
> Oznacza to, że można sprytnie zlikwidować konieczność otaczania
> każdej sekcji z pomiarem czasu oddzielnie beginem i endem, zostawiając
> jedynie namiastkę begin'a.
>
> Kod postaci:
> void Funkcja1(){
>
>   TProfilator::Begin("Funkcja1");
>       ...
>       Kod funkcji
>       ...
>   TProfilator::End("Funkcja1");
> }
>
> można zastąpić:
>
> void Funkcja1(){
>   TProfilatorHelper prof("Funkcja1");
>       ...
>       Kod funkcji
>       ...
> }
>
> Definicja klasy TProfilatorHelper: powinna w konstruktorze
> robić TProfilator::Begin a w destruktorze TProfilator::End ;)
>
> Dawno w C++ nie siedziałem, więc kodu tu nie wyprodukuję,
> ale onegdaj wielokrotnie wykorzystywałem tę cechę właśnie
> do monitoringu czasów, debugowania, czy też tworzenia bezpiecznych
> sekcji krytycznych (destruktor zdejmuje semafor). Kiedyś też
> przydało się to w implementacji protokołu ICQ, w którym
> przy tworzeniu pakietów danych trzeba struktury poprzedzać
> ich rozmiarami, a często w momencie rezerwowania miejsca
> na zapisanie rozmiaru jeszcze nie jest on znany a struktura dopiero
> w mozole powstaje. Rozmiar był zapisywany automatycznie
> przy wychodzeniu z sekcji krytycznej na podstawie różnicy
> bieżącego wskaźnika pozycji w buforze i pozycji, która była
> zapamiętana w momencie konstrukcji obiektu pilnującego rozmiaru.
> Ale nie ważne, za bardzo się zagłębiam ...
>
> Warto zauważyć, że w przypadku C++ (zupełnie nie da się tego
> stosować np. w Javie) taka konstrukcja obiektu nie wiąże się
> z alokacją pamięci - obiekt jest tworzony na stosie. Jest to więc
> konstrukcja bardzo efektywna - daje minimalny narzut pracy,
> co przy mierzeniu czasów jest bardzo istotne.
>
> Filip Sielimowicz
> http://panda.bg.univ.gda.pl/~sielim/kule.htm
>
> 
Re: Darmowy profilator kodu na stronie...
#11921
Author: mykey
Date: Wed, 01 Dec 2004 19:59
68 lines
3651 bytes
Dzięki za radę. To dobry pomysł ale:
- dymamiczna konstrukcja stanie się trochę wolniejsza co wpłynie negatywnie 
na czas pomiaru.
- nie będzie można w ten sposób zmierzyć czasu fragmentu funkcji (metody).


Użytkownik "Filip Sielimowicz" <sielim@poczta.onet.pl> napisał w wiadomości 
news:co1s50$d4l$1@news.onet.pl...
>
> Użytkownik "mykey" <BEZ_TEGOm.nakiewicz@sigma.rpl.pl> napisał w wiadomości
> news:cnto77$6t6$1@atlantis.news.tpi.pl...
>> http://www.mnakiewicz.webpark.pl/tprofilator/tprofilator.html
>
> Trochę to NTG, ale warto zauważyć, że, skoro już kod jest w C++
> to warto może wykorzystać fakt, że lokalne obiekty są automatycznie
> usuwane w momencie wychodzenia z sekcji, w której zostały
> zadeklarowane. Czyli jest wywoływany kod konstruktora.
>
> Oznacza to, że można sprytnie zlikwidować konieczność otaczania
> każdej sekcji z pomiarem czasu oddzielnie beginem i endem, zostawiając
> jedynie namiastkę begin'a.
>
> Kod postaci:
> void Funkcja1(){
>
>   TProfilator::Begin("Funkcja1");
>       ...
>       Kod funkcji
>       ...
>   TProfilator::End("Funkcja1");
> }
>
> można zastąpić:
>
> void Funkcja1(){
>   TProfilatorHelper prof("Funkcja1");
>       ...
>       Kod funkcji
>       ...
> }
>
> Definicja klasy TProfilatorHelper: powinna w konstruktorze
> robić TProfilator::Begin a w destruktorze TProfilator::End ;)
>
> Dawno w C++ nie siedziałem, więc kodu tu nie wyprodukuję,
> ale onegdaj wielokrotnie wykorzystywałem tę cechę właśnie
> do monitoringu czasów, debugowania, czy też tworzenia bezpiecznych
> sekcji krytycznych (destruktor zdejmuje semafor). Kiedyś też
> przydało się to w implementacji protokołu ICQ, w którym
> przy tworzeniu pakietów danych trzeba struktury poprzedzać
> ich rozmiarami, a często w momencie rezerwowania miejsca
> na zapisanie rozmiaru jeszcze nie jest on znany a struktura dopiero
> w mozole powstaje. Rozmiar był zapisywany automatycznie
> przy wychodzeniu z sekcji krytycznej na podstawie różnicy
> bieżącego wskaźnika pozycji w buforze i pozycji, która była
> zapamiętana w momencie konstrukcji obiektu pilnującego rozmiaru.
> Ale nie ważne, za bardzo się zagłębiam ...
>
> Warto zauważyć, że w przypadku C++ (zupełnie nie da się tego
> stosować np. w Javie) taka konstrukcja obiektu nie wiąże się
> z alokacją pamięci - obiekt jest tworzony na stosie. Jest to więc
> konstrukcja bardzo efektywna - daje minimalny narzut pracy,
> co przy mierzeniu czasów jest bardzo istotne.
>
> Filip Sielimowicz
> http://panda.bg.univ.gda.pl/~sielim/kule.htm
>
> 
Re: Darmowy profilator kodu na stronie...
#11922
Author: Filip Sielimowicz
Date: Wed, 01 Dec 2004 23:59
32 lines
1973 bytes
Użytkownik "mykey" <mykey@wp.pl> napisał w wiadomości
news:col7rg$5sd$1@atlantis.news.tpi.pl...
> Dzięki za radę. To dobry pomysł ale:
> - dymamiczna konstrukcja stanie się trochę wolniejsza co wpłynie
negatywnie
dynamiczna konstrukcja na stosie ? W c++ wyjdzie dokładnie na to samo,
jak deklaracja zmiennej lokalnej. Tu nie ma różnicy.

> na czas pomiaru.
> - nie będzie można w ten sposób zmierzyć czasu fragmentu funkcji (metody).
No będzie można ...
Czas jest mierzony w ramach SEKCJI, czyli jak chcemy mierzyć czas
fragmentu, to otaczamy go oddzielną sekcją { }. Może być trochę zamieszania
ze zmiennymi lokalnymi, ale to generalnienie jest żaden problem.

Czyli

int MyClass::MyMethod() {
  TProfilatorHelper p1("Sekcja nadrzędna - czas metody");
  ...
  {
      TProfilatorHelper p2("Sekcja zagłębiona - czas fragmentu metody");
      ...
  }
  ...
}

A NTG oznacza 'Not This Group'

Filip Sielimowicz
http://panda.bg.univ.gda.pl/~sielim/kule.htm
Re: Darmowy profilator kodu na stronie...
#11923
Author: mykey
Date: Thu, 02 Dec 2004 12:08
41 lines
2262 bytes
Faktycznie masz rację.

Użytkownik "Filip Sielimowicz" <sielim@poczta.onet.pl> napisał w wiadomości 
news:collr0$h9u$1@news.onet.pl...
>
> Użytkownik "mykey" <mykey@wp.pl> napisał w wiadomości
> news:col7rg$5sd$1@atlantis.news.tpi.pl...
>> Dzięki za radę. To dobry pomysł ale:
>> - dymamiczna konstrukcja stanie się trochę wolniejsza co wpłynie
> negatywnie
> dynamiczna konstrukcja na stosie ? W c++ wyjdzie dokładnie na to samo,
> jak deklaracja zmiennej lokalnej. Tu nie ma różnicy.
>
>> na czas pomiaru.
>> - nie będzie można w ten sposób zmierzyć czasu fragmentu funkcji 
>> (metody).
> No będzie można ...
> Czas jest mierzony w ramach SEKCJI, czyli jak chcemy mierzyć czas
> fragmentu, to otaczamy go oddzielną sekcją { }. Może być trochę 
> zamieszania
> ze zmiennymi lokalnymi, ale to generalnienie jest żaden problem.
>
> Czyli
>
> int MyClass::MyMethod() {
>  TProfilatorHelper p1("Sekcja nadrzędna - czas metody");
>  ...
>  {
>      TProfilatorHelper p2("Sekcja zagłębiona - czas fragmentu metody");
>      ...
>  }
>  ...
> }
>
> A NTG oznacza 'Not This Group'
>
> Filip Sielimowicz
> http://panda.bg.univ.gda.pl/~sielim/kule.htm
>
>
> 
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads