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

Pytanie do formatex - czy mogę jako zmienną dać tablicę, którą aktualnie formatuję?


Najlepsza odpowiedź GwynBleidD, 06.12.2014 07:42


Jestem na 99% pewny, że format właśnie tak działa, dlatego da się podawać tablicę wyjściową jako dowolny parametr. Formatex dlatego jest szybszy i wydajniejszy, bo operuje na tablicy, którą dostaje, a nie tworzy nowej. Zamiast robić tak jak piszesz lepiej użyć format(), zrobi to samo, a mniej pisania.

Dokładnie tak jest.

 


Z drugiej strony nie popadajmy już w taką skrajność z tą optymalnością,funkcja wywoływana nie częściej niż raz na 5 sekund, w głupiej wtyczce do modu, do gry, która nie wymaga nawet giga procka i ćwierć giga ramu, a żyjemy w czasach, gdzie procesory w telefonach o prędkości taktowania 1GHz uważa się już za średnią półkę.

Wiadomo, że sztuka programowania oczekuje optymalizacji na każdym kroku, ale nie sądzę, żeby czas poświęcony na kombinowanie z format/formatex był współmierny do osiągniętej (bądz też niekoniecznie) optymalizacji.

 

Przy wykonywaniu kodu np. w pre_thinku może mieć to kolosalne znaczenie. Mimo tych nadmiarowych gigaherców serwer będzie wyraźnie lagował, bo przetworzenie każdej klatki będzie trwało dłużej. I pamiętaj, że ta nadmiarowa moc prawie nigdy się nie marnuje - możesz przecież postawić więcej niż 1 serwer na 1 maszynie.

 

co do formatex: proste studium przypadku:

 

formatex(zmienna, charsmax(zmienna), "%s cośtam", zmienna)

formatex działa na dokładnie tej samej tablicy, czyli nie robi jej kopii przed wykonaniem operacji, co więc zrobi w tym przypadku? Zastąpi zmienną zawartością zmiennej, czyli nic nie zrobi :) A następnie dopisze cośtam na końcu tej zmiennej, czyli wszystko zadziała prawidłowo...

 

formatex(zmienna, charsmax(zmienna), "cośtam %s", zmienna)

W tym przypadku najpierw wpisze do zmiennej na początku "cośtam " a następnie dopisze do tego zawartość zmiennej. Zakładając, że zmienna zawiera "abcdefghijklmnopqrstuvwxyz", otrzymamy: "cośtam cośtam ghijklmnopqrstuvwxyz", czyli nie do końca to, o co nam chodziło...

 

W skrajnych przypadkach kod taki może wejść w pętlę nieskończoną (gdy zmienna będzie zawierać %s).

Przejdź do postu


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

#1 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 05.12.2014 19:39

Witam,

 

Mam taki oto kod:

new tablica[32];
ArrayGetString(przykladowyArray, index, tablica, 5)

formatex(tablica, charsmax(tablica), "cos tam cos tam %s", tablica)

Czy formatex zadziała?

Jak to jest z tym formatexem? Mogę tam dać tablicę (którą formatuje) jako parametr?


  • +
  • -
  • 0

#2 Droso

    Dawniej HubertTM

  • Support Team

Reputacja: 1 291
Godlike

  • Postów:2 371
  • Steam:steam
  • Imię:Hubert
  • Lokalizacja:Wrocław
Offline

Napisano 05.12.2014 19:49

FUNKCJA FORMATEX TO:

Szybsza wersja funkcji formatfavicons.png, lecz nie zadziała gdy tablica wynikowa jest użyta również jako jeden z parametrów.

Czyli generalnie nie możesz, ale pamiętam, że gdy dałem tablicę którą formatuje na samym początku czyli "%s tekst" to działało, dla reszty przypadków nie.

 

W innych przypadkach używaj format i bedzie git


Użytkownik Droso edytował ten post 05.12.2014 19:50

  • +
  • -
  • 0

Piszę pluginy pod: AMX MOD X oraz SOURCE MOD!

Na zlecenie i bez zlecenia zresztą też!


#3 NoLiFeR

    Wszechobecny

  • Użytkownik

Reputacja: 103
Zaawansowany

  • Postów:483
  • GG:
  • Imię:Adrian
  • Lokalizacja:Sosnowiec
Offline

Napisano 05.12.2014 20:51

Jest na to sposób.

 

Tworzysz nową zmienną, kopiujesz do niej tekst, i używasz w formatowaniu orginału z formatex jako jeden z parametrów, lecz nie jest to  wydajny sposób, lepiej używać format


Użytkownik NoLiFeR edytował ten post 05.12.2014 20:53

  • +
  • -
  • -2

#4 Rivit

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 05.12.2014 21:00

HubertTM

Przeoczyłem to w dokumentacji.
Potestuje i dam znać bo odpowiedź niejednoznaczna.


@up
Tak to też umiem -.-
  • +
  • -
  • 0

#5 grankee

    Godlike

  • Support Team

Reputacja: 517
Wszechwiedzący

  • Postów:1 500
  • Lokalizacja:Radom
Offline

Napisano 06.12.2014 05:59

Jest na to sposób.

 

Tworzysz nową zmienną, kopiujesz do niej tekst, i używasz w formatowaniu orginału z formatex jako jeden z parametrów, lecz nie jest to  wydajny sposób, lepiej używać format

Jestem na 99% pewny, że format właśnie tak działa, dlatego da się podawać tablicę wyjściową jako dowolny parametr. Formatex dlatego jest szybszy i wydajniejszy, bo operuje na tablicy, którą dostaje, a nie tworzy nowej. Zamiast robić tak jak piszesz lepiej użyć format(), zrobi to samo, a mniej pisania.

 

Z drugiej strony nie popadajmy już w taką skrajność z tą optymalnością,funkcja wywoływana nie częściej niż raz na 5 sekund, w głupiej wtyczce do modu, do gry, która nie wymaga nawet giga procka i ćwierć giga ramu, a żyjemy w czasach, gdzie procesory w telefonach o prędkości taktowania 1GHz uważa się już za średnią półkę.

Wiadomo, że sztuka programowania oczekuje optymalizacji na każdym kroku, ale nie sądzę, żeby czas poświęcony na kombinowanie z format/formatex był współmierny do osiągniętej (bądz też niekoniecznie) optymalizacji.


  • +
  • -
  • 3

#6 GwynBleidD

    Godlike

  • Przyjaciel

Reputacja: 1 869
Godlike

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

Napisano 06.12.2014 07:42   Najlepsza odpowiedź


Jestem na 99% pewny, że format właśnie tak działa, dlatego da się podawać tablicę wyjściową jako dowolny parametr. Formatex dlatego jest szybszy i wydajniejszy, bo operuje na tablicy, którą dostaje, a nie tworzy nowej. Zamiast robić tak jak piszesz lepiej użyć format(), zrobi to samo, a mniej pisania.

Dokładnie tak jest.

 


Z drugiej strony nie popadajmy już w taką skrajność z tą optymalnością,funkcja wywoływana nie częściej niż raz na 5 sekund, w głupiej wtyczce do modu, do gry, która nie wymaga nawet giga procka i ćwierć giga ramu, a żyjemy w czasach, gdzie procesory w telefonach o prędkości taktowania 1GHz uważa się już za średnią półkę.

Wiadomo, że sztuka programowania oczekuje optymalizacji na każdym kroku, ale nie sądzę, żeby czas poświęcony na kombinowanie z format/formatex był współmierny do osiągniętej (bądz też niekoniecznie) optymalizacji.

 

Przy wykonywaniu kodu np. w pre_thinku może mieć to kolosalne znaczenie. Mimo tych nadmiarowych gigaherców serwer będzie wyraźnie lagował, bo przetworzenie każdej klatki będzie trwało dłużej. I pamiętaj, że ta nadmiarowa moc prawie nigdy się nie marnuje - możesz przecież postawić więcej niż 1 serwer na 1 maszynie.

 

co do formatex: proste studium przypadku:

 

formatex(zmienna, charsmax(zmienna), "%s cośtam", zmienna)

formatex działa na dokładnie tej samej tablicy, czyli nie robi jej kopii przed wykonaniem operacji, co więc zrobi w tym przypadku? Zastąpi zmienną zawartością zmiennej, czyli nic nie zrobi :) A następnie dopisze cośtam na końcu tej zmiennej, czyli wszystko zadziała prawidłowo...

 

formatex(zmienna, charsmax(zmienna), "cośtam %s", zmienna)

W tym przypadku najpierw wpisze do zmiennej na początku "cośtam " a następnie dopisze do tego zawartość zmiennej. Zakładając, że zmienna zawiera "abcdefghijklmnopqrstuvwxyz", otrzymamy: "cośtam cośtam ghijklmnopqrstuvwxyz", czyli nie do końca to, o co nam chodziło...

 

W skrajnych przypadkach kod taki może wejść w pętlę nieskończoną (gdy zmienna będzie zawierać %s).


  • +
  • -
  • 1

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