Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

Optymalizacja - parę pytań.


  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
8 odpowiedzi w tym temacie

#1 sebuli

    Zaawansowany

  • Użytkownik

Reputacja: 3
Nowy

  • Postów:128
  • Lokalizacja:Bydgoszcz
Offline

Napisano 10.02.2013 20:31

Hej!

Ostatnio zastanawiam się nad optymalizacją swojego coda i nasunęło mi się parę pytań.

1. Czy są jakieś eventy, forwardy, które żrą strasznie cpu albo po prostu nie opłaca się ich używać właśnie z tego powodu?
2. Czy używanie warunków mocno obciąża CPU? Na przykład 20 ifów w evencie HAM_TakeDamage czy w evencie spawnu od hamsandwich?
3. Czy są jakieś metody by uniknąć używania warunków prócz switch?
4. Jeżeli mam 11 include'ów w moim modzie, ale np. od trzech z nich używam tylko po 2-3 komendy, to czy to ma wpływ na działanie serwera? Czy kompilator już to jakoś optymalizuje i bierze tylko to co potrzebne.
5. Co jest bardziej optymalne, tworzenie dwóch zmiennych np. new gracze[33][2] oraz new gracze2[33][2] czy może wzięcie to w jedną zmienna gracze[33][4]. Czy między tym sposobem a tym jest jakaś wielka różnica w wydajności serwera?
6. Czy dużą różnicą dla serwera jest jeśli określę wielkość tablicy? Bo przykładowo mam teraz informacje_przedmiotu_gracza[][], lepiej określić wielkość?
7. Jeżeli tworzę 5 zmiennych to czy jest róznica jest zrobie to tak: new zmienna1,zmienna2,zmienna3,zmienna4,zmienna5; niż jak zrobiłbym new zmienna1; new zmienna2; new zmienna3; new zmienna4; new zmienna5; ?

Za wszelkie sensowne i pomagające odpowiedzi już z góry dziękuję :)

Użytkownik sebuli edytował ten post 10.02.2013 20:40

  • +
  • -
  • 0

#2 Fili:P

    Godlike

  • Power User

Reputacja: 754
Guru

  • Postów:1 679
  • Imię:Darek
  • Lokalizacja:Warszawa
Offline

Napisano 10.02.2013 20:35

5. Co jest bardziej optymalne, tworzenie dwóch zmiennych np. new gracze[33][2] oraz new gracze2[33][2] czy może wzięcie to w jedną zmienna gracze[33][4]. Czy między tym sposobem a tym jest jakaś wielka różnica w wydajności serwera?

Sądze że w ten sposób użyjesz 1 a nie 2 pętli, więc myślę ze to będzie optymalniejsze.

3. Czy są jakieś metody by uniknąć używania warunków prócz switch?

Dlaczego chcesz ich unikać ?
  • +
  • -
  • 1

#3 sebuli

    Zaawansowany

  • Autor tematu
  • Użytkownik

Reputacja: 3
Nowy

  • Postów:128
  • Lokalizacja:Bydgoszcz
Offline

Napisano 10.02.2013 20:36

Słyszałem, że masowe używanie warunków if np. po 20 w danym publicu strasznie obciążają serwer.
  • +
  • -
  • 0

#4 Fili:P

    Godlike

  • Power User

Reputacja: 754
Guru

  • Postów:1 679
  • Imię:Darek
  • Lokalizacja:Warszawa
Offline

Napisano 10.02.2013 20:39

Słyszałem, że masowe używanie warunków if np. po 20 w danym publicu strasznie obciążają serwer.

Pierwsze słyszę o_O
Nie możesz używać nawiasów, || i &&, skoro chcesz mniej ifów ?
  • +
  • -
  • 0

#5 sebuli

    Zaawansowany

  • Autor tematu
  • Użytkownik

Reputacja: 3
Nowy

  • Postów:128
  • Lokalizacja:Bydgoszcz
Offline

Napisano 10.02.2013 20:42

no rozumiem ale mam kilkanaście zmiennych i nie da ich się połączyć stosując || oraz &&. Zresztą każda operacja typu || lub && też pożera procesor szczególnie, gdy na serwerze jest 30 ludzi.
  • +
  • -
  • 0

#6 radim

    Godlike

  • Moderator

Reputacja: 939
Master

  • Postów:2 725
  • Steam:steam
  • Imię:Arkadiusz
  • Lokalizacja:Janów Lub.
Offline

Napisano 11.02.2013 08:44

7. Jeżeli tworzę 5 zmiennych to czy jest róznica jest zrobie to tak: new zmienna1,zmienna2,zmienna3,zmienna4,zmienna5; niż jak zrobiłbym new zmienna1; new zmienna2; new zmienna3; new zmienna4; new zmienna5; ?

To już czysta estetyka. Żadnej różnicy nie ma oraz żadnego wpływu na działania/obciążanie serwera.
  • +
  • -
  • 1

Chcąc napisać do mnie prywatną wiadomość, wpierw zapoznaj się ze stroną "O mnie" w moim profilu użytkownika [ radim ] !


#7 sebuli

    Zaawansowany

  • Autor tematu
  • Użytkownik

Reputacja: 3
Nowy

  • Postów:128
  • Lokalizacja:Bydgoszcz
Offline

Napisano 11.02.2013 17:28

Okej dziękuję bardzo za odpowiedzi :) czekam na następne
  • +
  • -
  • 0

#8 Gość_21977_*

  • Gość

Reputacja: 0

Offline

Napisano 19.02.2013 18:59

Ad.1.
Forwardy mogą być wysyłane albo do określonych pluginów, albo wszędzie, zatem jego użycie należy ograniczyć już przy projektowaniu, nie wysyłając niepotrzebnie informacji do pluginów, które z niego nie korzystają.
Kwestia wydajności bardziej dotyczy natywów oraz stocków, przykładowo fm_give_item jest dużo wolniejsze, niż give_item.

Ad.2.
Warunki z reguły są prostą operacją porównania, która zbytnio nie ma większego znaczenia dla zużycia procesora.
Jednak warto się zastanowić nad ich koniecznością w miejscach często wykonywanych, np. wewnątrz dużych, zagnieżdżonych pętli, bądź w funkcjach o małym interwale czasowym, np. ServerPreFrame.
Będąc przy warunkach, nadmienię, że warto zwrócić uwagę na kolejność warunków, o czym pisałem szerzej tutaj.

Ad.3.
Jak najbardziej.
Często widzimy konstrukcje typu
if(a==1){
// cośtam
} else if(a==2){
// cośtam
} else if(a==3){
// cośtam
}
Tworzenie 3 porównań tej samej zmiennej jest zbędne i nieoptymalne.
w tym wypadku warto porównywać tę zmienną od razu z wieloma wartościami, na co pozwala nam funkcja switch
switch(a){
case 1:{
// cośtam
}
case 2:{
// cośtam
}
case 3:{
// cośtam
}
}


Ad.4.
Tyczy się to raczej pamięci, w którą ładujesz całe biblioteki, z których niekoniecznie korzystasz.
Jeśli jednak dane moduły są wykorzystywane przez inne pluginy, to nie przejmowałbym się tym za bardzo.

Ad.5.
Różnica jest naprawdę znikoma.

Ad.7.
Jest to tylko inna forma zapisu, ostatecznie forma w pliku wynikowym będzie taka sama.

#9 GwynBleidD

    Godlike

  • Przyjaciel

Reputacja: 1 869
Godlike

  • Postów:3 066
  • Steam:steam
  • Lokalizacja:Przemyśl
Offline

Napisano 06.03.2013 15:18

Co do wielu ifów, dodam jeszcze, że dobrze jest ułożyć je tak (jeśli używamy kilku/kilkunastu), aby ten najczęściej "odrzucany" był pierwszy, dzięki czemu dalsze będą się rzadziej wykonywać. Dokładnie to samo, co przy zapisywaniu w jednym warunku, do czego dał Ci link benio :)
  • +
  • -
  • 0

NIE pomagam na PW. Nie trudź się, na zlecenia nie odpiszę... Od pomagania jest forum.
NIE zaglądam w tematy wysłane na PW. Jeśli są na forum to prędzej czy później je przeczytam. Jeśli mam co w nich odpisać, to odpiszę.
 
1988650.png?theme=dark





Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych