Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
vivo X300 Pro rappresenta un'evoluzione misurata della serie fotografica del produttore cinese, con un sistema di fotocamere migliorato, chipset Dimensity 9500 di ultima generazione e l'arrivo dell'interfaccia OriginOS 6 anche sui modelli internazionali. La scelta di limitare la batteria a 5.440mAh nel mercato europeo, rispetto ai 6.510mAh disponibili altrove, fa storcere un po' il naso
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2 è la nuova handheld PC gaming con processore AMD Ryzen Z2 Extreme (8 core Zen 5/5c, GPU RDNA 3.5 16 CU) e schermo OLED 8,8" 1920x1200 144Hz. È dotata anche di controller rimovibili TrueStrike con joystick Hall effect e una batteria da 74Wh. Rispetto al dispositivo che l'ha preceduta, migliora ergonomia e prestazioni a basse risoluzioni, ma pesa 920g e costa 1.299€ nella configurazione con 32GB RAM/1TB SSD e Z2 Extreme
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
A re:Invent 2025, AWS mostra un’evoluzione profonda della propria strategia: l’IA diventa una piattaforma di servizi sempre più pronta all’uso, con agenti e modelli preconfigurati che accelerano lo sviluppo, mentre il cloud resta la base imprescindibile per governare dati, complessità e lock-in in uno scenario sempre più orientato all’hybrid cloud
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 28-08-2008, 12:26   #1
UnknownSoldier
Member
 
Iscritto dal: Aug 2008
Messaggi: 210
[Java] Come migliorare le prestazioni di una complessa Applet?

Salve. Da circa un mese a questa parte sto lavorando assiduamente alla creazione di una chat utilizzando applet dal lato client e uno script php dal lato server. Ho ancora parecchie cose da sistemare, ma la cosa principale sono le prestazioni. Se avvio l'applet da locale, il programma scorre una meraviglia, ma se l'avvio on-line noto dei rallentamenti. Sarà perchè il collegamento con i file (sì uso diversi file di testo per gestire conversazioni, registrazioni ecc...) nella rete è indubbiamente più lento del locale, ok. Ma io noto che il programma mi va a scatti anche solo se digito del testo in un JTextField, però non sempre. Ci sono delle volte in cui non ci sono rallentamenti, e certe volte in cui sì. In locale invece non ho mai avuto rallentamenti di alcun tipo... non mi metto di certo a postare l'intero sorgente, dato che sono più di 2900 righe di codice.

Vorrei sapere in linea generale gli elementi che più influiscono sulle prestazioni. Ad esempio, attualmente uso tre Timer, ognuno agisce in tempi separati. Se sostituissi i Timer con dei Thread sarebbe meglio? E cosa cambia tra Applet e JApplet?
Insomma, vorrei dei consigli per migliorare le prestazioni della mia applet...

Per provare la chat (ovviamente ancora incompleta), potete andare a questo indirizzo: http://www.lenostreidee.net/DFChat/DFChat.html

Magari mi dite se anche voi notate dei rallentamenti o no... avendo un solo computer mi risulta difficile fare test on-line

Ciao e grazie per l'attenzione
UnknownSoldier è offline   Rispondi citando il messaggio o parte di esso
Old 28-08-2008, 13:11   #2
marko.fatto
Senior Member
 
L'Avatar di marko.fatto
 
Iscritto dal: Jul 2007
Messaggi: 499
mi va senza problemi.. non noto rallentamenti
__________________
marko.fatto è offline   Rispondi citando il messaggio o parte di esso
Old 28-08-2008, 13:17   #3
variabilepippo
Senior Member
 
L'Avatar di variabilepippo
 
Iscritto dal: Mar 2007
Messaggi: 1792
Nessun rallentamento apprezzabile...
variabilepippo è offline   Rispondi citando il messaggio o parte di esso
Old 28-08-2008, 13:21   #4
ndakota
Senior Member
 
L'Avatar di ndakota
 
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
io ho notato solo che se mandi 4/5 messaggi velocemente tipo di una sola lettera appaiono tutti insieme, ma penso sia normale..
ndakota è offline   Rispondi citando il messaggio o parte di esso
Old 28-08-2008, 13:55   #5
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Provata anch'io assieme un altro utente e sia io che l'altro abbiamo notato qualche lag (non si verificava sempre però) sia durante la digitazione del testo nel JTextField sia nell'invio del messaggio e la sua effettiva apparizione nella finestra di chat.

Puoi provare a spiegarci in che modo usi i Timer e per controllare cosa?
Inoltre quante letture/scritture dai/sui file locali fa la chat?
Magari si può elaborare una strategia per bufferizzare e scrivere sui file solo quando strettamete neccessario, o nei "tempi morti".

Ciao

P.S.: io avevo anche qualche problema di charset credo, perchè le vocali accentate spedite dall'altro utente non le vedevo visualizzate correttamente nella finestra di chat, mentre se ero io a spedirle alla chat, l'altro utente le vedeva correttamente.
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 28-08-2008, 14:09   #6
UnknownSoldier
Member
 
Iscritto dal: Aug 2008
Messaggi: 210
Innanzitutto grazie per l'interessamento!

Ora spiego brevemente cosa fanno questi 3 Timer:

Il primo agisce ogni secondo e legge i messaggi dal file di testo e li stampa nel JEditorPane principale. Serve quindi a leggere i messaggi.

Il secondo agisce ogni 3 secondi e legge i nomi degli utenti on-line da un file di testo e quindi aggiorna la lista degli utenti on-line

Il terzo infine, agisce ogni 5 secondi e legge da un file di testo i nomi degli utenti bannati e provvede quindi all'espulsione in caso che il nick in uso coincida con un nick trovato nel file di testo.

Un'altra cosa strana è che ad un mio amico la la finestra di chat si è aperta dopo quasi 1 minuto o più... è possibile che possa succedere se si ha una vecchia versione di JRE installata?
UnknownSoldier è offline   Rispondi citando il messaggio o parte di esso
Old 28-08-2008, 14:15   #7
UnknownSoldier
Member
 
Iscritto dal: Aug 2008
Messaggi: 210
Quote:
Originariamente inviato da ndakota Guarda i messaggi
io ho notato solo che se mandi 4/5 messaggi velocemente tipo di una sola lettera appaiono tutti insieme, ma penso sia normale..
E' normale considerando che il JEditorPane si aggiorna ogni secondo
UnknownSoldier è offline   Rispondi citando il messaggio o parte di esso
Old 28-08-2008, 14:17   #8
UnknownSoldier
Member
 
Iscritto dal: Aug 2008
Messaggi: 210
Per quanto riguarda il charset, mi pare molto strano... prima avevo questo problema ma poi ho corretto e ora non c'è più. Possibile che possa essere un problema tuo? Anche se mi sembra difficile o_O
UnknownSoldier è offline   Rispondi citando il messaggio o parte di esso
Old 28-08-2008, 14:36   #9
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Dunque, visto il modo in cui usi i file di testo, non potresti sostituirli con qualche buffer in memoria?
Scrivere e leggere dal buffer sarebbe più rapido che da file.

Per il discorso Timer/Thread: ho guardato velocemente la classe Timer: non è altro che una "facility" per i thread che devono eseguire dei task, in un certo momento e/o ogni certo intervallo di tempo, percui il problema non si pone visto che non stai assegnando task a mille mila thread ma solo a tre.

Ciao

@EDIT:
Quote:
Per quanto riguarda il charset, mi pare molto strano... prima avevo questo problema ma poi ho corretto e ora non c'è più. Possibile che possa essere un problema tuo?
non ne ho idea
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 28-08-2008, 14:39   #10
UnknownSoldier
Member
 
Iscritto dal: Aug 2008
Messaggi: 210
Quote:
Originariamente inviato da banryu79 Guarda i messaggi
Dunque, visto il modo in cui usi i file di testo, non potresti sostituirli con qualche buffer in memoria?
Scrivere e leggere dal buffer sarebbe più rapido che da file.

Per il discorso Timer/Thread: ho guardato velocemente la classe Timer: non è altro che una "facility" per i thread che devono eseguire dei task, in un certo momento e/o ogni certo intervallo di tempo, percui il problema non si pone visto che non stai assegnando task a mille mila thread ma solo a tre.

Ciao

@EDIT:

non ne ho idea
Non ho capito bene cosa intendi con quel sistema di buffer in memoria... potresti essere più preciso?
UnknownSoldier è offline   Rispondi citando il messaggio o parte di esso
Old 28-08-2008, 14:45   #11
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da UnknownSoldier Guarda i messaggi
Non ho capito bene cosa intendi con quel sistema di buffer in memoria... potresti essere più preciso?
Considetando che non ho mai programmato nulla che non fosse strettamente classificabile come "desktop application" potrei aver detto una cavolata.

I file di testo che usi adesso, di preciso a cosa servono?
Cioè quando vengono scritti e da chi, e quando vengono letti e da chi?

@EDIT:
scusa, hai la chat, aprila che la usiamo
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)

Ultima modifica di banryu79 : 28-08-2008 alle 14:47.
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 28-08-2008, 14:54   #12
UnknownSoldier
Member
 
Iscritto dal: Aug 2008
Messaggi: 210
Quote:
Originariamente inviato da banryu79 Guarda i messaggi
Considetando che non ho mai programmato nulla che non fosse strettamente classificabile come "desktop application" potrei aver detto una cavolata.

I file di testo che usi adesso, di preciso a cosa servono?
Cioè quando vengono scritti e da chi, e quando vengono letti e da chi?
Uso i file perchè:

1) Per usare i socket avrei bisogno di un server dedicato

2) Evito di usare i database in modo che questa chat sia utilizzabile ad una più vasta gamma di utenti e con più semplicità

L'applet java fa da client per ogni utente che si collega alla chat. Siccome non ho idea di come fare per scrivere file di testo da applet java su uno spazio web, mi affido ad uno script php che svolge queste funzioni in modo molto semplice.

Quando nella pagina iniziale si inserisce un nick per entrare, l'applet java legge il file di testo che contiene la lista di tutti i nick attualmente on-line, e se trova uno stesso nick già collegato, la lettura si interrompe e viene comunicato che quel nick è già in uso. Se invece non è in uso, la finestra di chat si apre e si è quindi collegati.

Il JTextField che serve per inviare i messaggi, quando si preme invio o si preme il pulsante "Invia messaggio", invia il testo attualmente presente sul JTextField e lo invia ad uno script php attraverso una richiesta GET. Lo script php riceve questi dati e apre il file messageList.txt in modalità append e aggiunge il messaggio.

Ogni secondo il timer readerTimer effettua una lettura a messageList, e quindi aggiorna il JEditorPane se ci sono nuovi messaggi

PS: sono collegato :P
UnknownSoldier è offline   Rispondi citando il messaggio o parte di esso
Old 28-08-2008, 15:11   #13
UnknownSoldier
Member
 
Iscritto dal: Aug 2008
Messaggi: 210
Riguardo ai blocchi, a volte che si verificano e a volte no, ecco parte del codice inerente all'invio dei messaggi:

Al JTextField ho impostato la classe per gli eventi SendMessageHandler.
mainTextArea sarebbe il JEditorPane principale che visualizza i messaggi.
Forse questi blocchi si verificano quando contemporaneamente il Timer che legge i messaggi e l'actionPerformed di SendMessageHandler vengono eseguiti?

Codice:
	private class SendMessageHandler implements ActionListener
	{
		public void actionPerformed (ActionEvent event)
		{
			if (!insertMessageField.getText().equals (""))
			{
				String message = insertMessageField.getText();
				
				sendMessage ("all", username, message);
				
				messageList += "\n" + username + " > " + insertMessageField.getText();
				mainTextArea.setText (messageList);
				
				insertMessageField.setText ("");
			}
		}
	}


private void sendMessage (String to, String username, String message)
	{		
		InputStream inputStream = null;
		try
		{
			String address = "http://" + Host + "/DFChat/server/server.php?r=1&to="
			+ to.replace (" ", "_") + "&user=" + username.replace (" ", "_") + "&message=" + message.replace (" ", "_");

			URL url = new URL (address);
			URLConnection connection = url.openConnection();
			connection.setDoOutput (true);
			
			inputStream = connection.getInputStream();
		}
		catch (Exception exception)
		{
			exception.printStackTrace();
		}
		finally
		{
			try
			{
				inputStream.close();
			}
			catch (Exception exception)
			{
				exception.printStackTrace();
			}
		}
	}
UnknownSoldier è offline   Rispondi citando il messaggio o parte di esso
Old 28-08-2008, 15:53   #14
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Il JTextField che serve per inviare i messaggi, quando si preme invio o si preme il pulsante "Invia messaggio", invia il testo attualmente presente sul JTextField e lo invia ad uno script php attraverso una richiesta GET. Lo script php riceve questi dati e apre il file messageList.txt in modalità append e aggiunge il messaggio.
Questo avviene qui (evidenziato in grassetto)
Codice:
private void sendMessage (String to, String username, String message)
{		
    InputStream inputStream = null;
    try
    {
         String address = "http://" + Host + "/DFChat/server/server.php?r=1&to=" + to.replace (" ", "_") + "&user=" + username.replace (" ", "_") + "&message=" + message.replace (" ", "_");

         URL url = new URL (address);
         URLConnection connection = url.openConnection();
         connection.setDoOutput (true);
			
         inputStream = connection.getInputStream();
    }
    catch (Exception exception)
    {
        exception.printStackTrace();
    }
    finally
    {
        try
        {
             inputStream.close();
        }
             catch (Exception exception)
        {
             exception.printStackTrace();
        }
    }
}
Nota(1): il codice in blu probabilmente non serve a nulla.

Nota(2): il metodo sendMessage() viene chiamato dal metodo actionPerformed() che rappresenta la risposta all'evento "action" del JTextField: siccome il thread esecutore di questo pezzo di codice è l'AWT Event Thread, la latenza ptrebbe essere eliminata facendo eseguire sendMessage() ad un thread apposito, e liberando così l'AWT event thread, con un migliore risultato nella percezione di reattività che l'utente ha del client della tua chat.

Prova così:

Codice:
private void sendMessage (String to, String username, String message)
{
    try
    {
         Thread senderThread = new Thread() 
         {
              @Override
              public void run() 
              {
                   String address = "http://" + Host + "/DFChat/server/server.php?r=1&to=" + to.replace (" ", "_") + "&user=" + username.replace (" ", "_") + "&message=" + message.replace (" ", "_");

                   URL url = new URL (address);
                   URLConnection connection = url.openConnection();
              }   
        };
        senderThread.start();
    }
    catch (Exception exception)
    {
        exception.printStackTrace();
    }
}

DISCLAIMER: sono un niubbo della programmazione, potrei quindi averti consigliato fesserie ma due cose giocano in mio favore:
1) la possibilità che altri utenti corregano eventuali errori;
2) il fatto che tentar non nuoce: fai un test.

Ciao
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)

Ultima modifica di banryu79 : 28-08-2008 alle 15:55.
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 28-08-2008, 15:56   #15
UnknownSoldier
Member
 
Iscritto dal: Aug 2008
Messaggi: 210
Grazie potrei provare. Comunque l'InputStream mi serve. Se non eseguo getInputStream(), la chiamata allo script php non viene eseguita.
UnknownSoldier è offline   Rispondi citando il messaggio o parte di esso
Old 28-08-2008, 15:57   #16
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da UnknownSoldier Guarda i messaggi
Grazie potrei provare. Comunque l'InputStream mi serve. Se non eseguo getInputStream(), la chiamata allo script php non viene eseguita.
Ah, non lo sapevo, non so niente di web e php.
Si sa il perchè?
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 28-08-2008, 16:04   #17
UnknownSoldier
Member
 
Iscritto dal: Aug 2008
Messaggi: 210
Quote:
Originariamente inviato da banryu79 Guarda i messaggi
Ah, non lo sapevo, non so niente di web e php.
Si sa il perchè?
Non lo so, ho solo provato a toglierlo, e non va
UnknownSoldier è offline   Rispondi citando il messaggio o parte di esso
Old 28-08-2008, 16:24   #18
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da UnknownSoldier Guarda i messaggi
Non lo so, ho solo provato a toglierlo, e non va
Forse ho capito perchè.
Leggendo qui si evince che:

Quote:
The abstract class URLConnection is the superclass of all classes that represent a communications link between the application and a URL. Instances of this class can be used both to read from and to write to the resource referenced by the URL. In general, creating a connection to a URL is a multistep process:

1. The connection object is created by invoking the openConnection method on a URL.
2. The setup parameters and general request properties are manipulated.
3. The actual connection to the remote object is made, using the connect method.
4. The remote object becomes available. The header fields and the contents of the remote object can be accessed.
e anche che:

Quote:
The following methods are used to access the header fields and the contents after the connection is made to the remote object:

* getContent
* getHeaderField
* getInputStream
* getOutputStream
Siccome nel tuo codice non chiami esplicitamente il metodo connect(), la connessione all'oggetto remoto non avviene (e quindi lo script php non viene invocato) e quindi quando il codice esegue connection.getInputStream(), che come specificato sopra necessita che la connessione sia stabilita, siccome la connessione non è ancora stata aperta la apre lui dietro le quinte (suppongo).

Quindi puoi rimuovere la chiamata e il blocco try{}catch(){}finally{} relativo all'oggetto InputStream e sostituire il tutto con una chiamata esplicita al metodo connect().

Javadoc rulez!
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 28-08-2008, 17:07   #19
UnknownSoldier
Member
 
Iscritto dal: Aug 2008
Messaggi: 210
Quote:
Originariamente inviato da banryu79 Guarda i messaggi
Forse ho capito perchè.
Leggendo qui si evince che:



e anche che:



Siccome nel tuo codice non chiami esplicitamente il metodo connect(), la connessione all'oggetto remoto non avviene (e quindi lo script php non viene invocato) e quindi quando il codice esegue connection.getInputStream(), che come specificato sopra necessita che la connessione sia stabilita, siccome la connessione non è ancora stata aperta la apre lui dietro le quinte (suppongo).

Quindi puoi rimuovere la chiamata e il blocco try{}catch(){}finally{} relativo all'oggetto InputStream e sostituire il tutto con una chiamata esplicita al metodo connect().

Javadoc rulez!
Ma connect() sarebbe un metodo di URLConnection?

Ritornando a prima, non capisco perchè in locale non mi da blocchi e on-line sì... comunque ora provo a fare come mi hai detto Però aggiungendo anche il metodo invokeLater, che secondo me indispensabile per dare una maggiore robustezza nella gestione dei componenti Swing.
UnknownSoldier è offline   Rispondi citando il messaggio o parte di esso
Old 28-08-2008, 17:25   #20
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da UnknownSoldier Guarda i messaggi
Ma connect() sarebbe un metodo di URLConnection?
Leggi il link che ti ho postato.

Quote:
Ritornando a prima, non capisco perchè in locale non mi da blocchi e on-line sì... comunque ora provo a fare come mi hai detto
Forse perchè in locale la pagina php risiede nel tuo pc oppure in un pc nella tua lan e fa molto prima...

Quote:
Però aggiungendo anche il metodo invokeLater, che secondo me indispensabile per dare una maggiore robustezza nella gestione dei componenti Swing.
Attenzione. Leggi qua.
Con invokeLater accodi all'AWT Event Thread un oggetto Runnable (un Thread è un oggetto Runnable) perchè venga eseguito in maniera asincrona dall'AWT Event Thread.

Quello che invece io ti ho postato, è un metodo per eseguire sendMessage() fuori dall'AWT Event Thread, in un altro Thread.
Questo proprio allo scopo di non rallentare il processing dei messaggi e update dell'interfaccia grafica.

E' chiara la differenza?
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria Recensione vivo X300 Pro: è ancora lui il...
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'...
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti AWS re:Invent 2025: inizia l'era dell'AI-as-a-Se...
Cos'è la bolla dell'IA e perché se ne parla Cos'è la bolla dell'IA e perché se...
BOOX Palma 2 Pro in prova: l'e-reader diventa a colori, e davvero tascabile BOOX Palma 2 Pro in prova: l'e-reader diventa a ...
Peaky Blinders: The Immortal Man, Netfli...
iPhone Air: la nuova generazione potrebb...
Il Galaxy S26 Ultra avrà una batteria da...
EV Clinic cambia un settore: ora produce...
OnePlus ha anticipato l'arrivo della ver...
Amazon ha sospeso la sperimentazione del...
Mark Hamill sarà per sempre Luke ...
Amazon rilancia i bestseller fra cui un ...
Puoi giocare ad Halo in Minecraft? Sì, s...
WhatsApp: in fase di test l'introduzione...
XPeng G9 MY26 segna il record europeo pe...
Apple corregge due gravi vulnerabilit&ag...
DC Comics batte al cinema Marvel per la ...
L'iPhone più sottile di sempre scende di...
Saros di Housemarque punta ad offrire un...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 16:18.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v