|
|
|
![]() |
|
Strumenti |
![]() |
#61 |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Eh... per me leggere i post di PGI è sempre fonte di ispirazione.
__________________
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) |
![]() |
![]() |
![]() |
#62 |
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Eqque qua:
http://www.filedropper.com/findnew Uso l'esempio javadoc adattato però per contare i file nascosti e normali: ![]() 778 secondi contro 20 secondi. 778 secondi: leggasi: 13 minuti 20 secondi: leggasi: un terzo di minuto Mi verrebbe da mettere la faccina LOL ma non vi piace ![]() ![]() EDIT: dimenticavo: i file(la dll e l'eseguibile windows) sono stati creati con Visual Studio 2012. Quindi potrebbe essere necessario, per poter eseguire il pogramma, installare i runtime del compilatore che potete scaricare gratuitamente da qui: http://www.microsoft.com/it-it/downl....aspx?id=30679 ![]() Ultima modifica di Vincenzo1968 : 17-03-2013 alle 23:10. Motivo: Aggiunta versione C#. |
![]() |
![]() |
![]() |
#63 |
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Ah dimenticavo: nella mia dll ho usato l'algoritmo ricorsivo. Se usassi l'algoritmo iterativo ci impiegherebbe molto meno tempo.
Vediamo chi ha il coraggio di negare che, in situazioni come queste, non sarebbe il caso di usare Java-C(via JNI o, meglio, via JNA). ![]() |
![]() |
![]() |
![]() |
#64 |
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
|
![]() |
![]() |
![]() |
#65 |
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
https://github.com/twall/jna#readme
Java Native Access (JNA) The definitive JNA reference (including an overview and usage details) is in the JavaDoc. Please read the overview. JNA provides Java programs easy access to native shared libraries (DLLs on Windows) without writing anything but Java code—no JNI or native code is required. This functionality is comparable to Windows' Platform/Invoke and Python's ctypes. Access is dynamic at runtime without code generation. JNA allows you to call directly into native functions using natural Java method invocation. The Java call looks just like it does in native code. Most calls require no special handling or configuration; no boilerplate or generated code is required. The JNA library uses a small native library stub to dynamically invoke native code. The developer uses a Java interface to describe functions and structures in the target native library. This makes it quite easy to take advantage of native platform features without incurring the high overhead of configuring and building JNI code for multiple platforms. While some attention is paid to performance, correctness and ease of use take priority. JNA includes a platform library with many native functions already mapped as well as a set of utility interfaces that simplify native access. ![]() |
![]() |
![]() |
![]() |
#66 |
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Comunque vale davvero la pena di rileggerseli con attenzione questi due magnifici thread:
http://www.hwupgrade.it/forum/showth...0#post18906850 http://www.hwupgrade.it/forum/showth...7#post18984007 Ancora non ho trovato il thread che dovrebbe giustificare quella squallida frase in firma ![]() |
![]() |
![]() |
![]() |
#67 |
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
|
![]() |
![]() |
![]() |
#68 |
Senior Member
Iscritto dal: Jul 2005
Città: Bologna
Messaggi: 1130
|
Prima dei tempi guarderei i risultati, che sono diversi...
__________________
-> The Motherfucking Manifesto For Programming, Motherfuckers |
![]() |
![]() |
![]() |
#69 |
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Perché Java, a un certo punto, lancia, non si sa perché, l'eccezione AccessDeniedException sulla cartella C:\Qoobox\BackEnv; si vede nell'immagine postata.
Ma quello è codice preso da JavaDoc come m'avete consigliato. Postate il vostro codice che rifaccio i benchmark. ![]() Inoltre, Shinya, puoi accertarti della bontà dell'applicazione C provandola su una cartella con pochi file. Marcane qualcuno col flag hidden e vedi. ![]() Ultima modifica di Vincenzo1968 : 15-03-2013 alle 16:10. |
![]() |
![]() |
![]() |
#70 |
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
dio maledica Sun, Gosling e tutti quelli che hanno collaborato a questo strumento del diavolo.(cit.)
Indovinate, di chi è la frase citata? http://www.hwupgrade.it/forum/showpo...02&postcount=2 Sottovento, che è? che dici? Il linguaggio critica, non le persone che ci lavorano: "Sun è assolutamente indifendibile su queste porcate da dilettanti allo sbaraglio.". Sottove', 'mbé? EDIT: Josling & soci dovevano andare a zappare invece di fare tutto questo danno. http://www.hwupgrade.it/forum/showpo...9&postcount=17 Ultima modifica di Vincenzo1968 : 15-03-2013 alle 17:45. |
![]() |
![]() |
![]() |
#71 | |
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Quote:
Evidentemente sono io che ho frainteso: sai, quando scrivi LOL, metti ometti a braccia conserte e tutto l'armamentario, significa che stai ridendo in faccia al tuo interlocutore, vuoi sottolineare il fatto che la tua controparte ha detto una c...ta. Molti di questi interlocutori possono pensarla in maniera diversa da te, ma non e' un buon motivo per questo comportamento. Ho cercato di fartelo notare, ma hai risposto andando a prendere qua e la' dei messaggi, tentando di giustificare il tuo comportamento. Giustificatissimo!! Continua pure cosi', alla grande. Piace a tutti. Non badare a me, io ho una cosa da fare, non rispondero' piu'. Sui forum puo' capitare di avere diverbi ed anche arrabbiarsi con chi la pensa in maniera diversa e vede come fenomenale una tecnologia o un linguaggio che ti fa schifo. Ma onestamente, non ho mai trovato nessuno offensivo, nonostante i toni accesi. Stiamo parlando di cose soggettive, quindi il problema puo' essere benissimo mio, ma non sono l'unico a sentirsi offeso dal tuo modo di fare. Se vuoi un suggerimento da amico, prova a pensare a queste parole, potresti guadagnarci. Anzi, ci guadagneremmo tutti. So che non puoi lasciare l'ultima parola a nessuno e quindi il mio post scatenera' un'altra ridda di risposte. Non preoccuparti, non ne leggero' nemmeno una. Ad ogni modo: come sempre, il tuo programma C++ e' SBAGLIATO. Succede, quando si scrive software per umiliare gli altri, dev'esserci una specie di legge del contrappasso informatico. Meglio scriverlo ancora: SBAGLIATO. Nella mia directory di test avevo 9 files, nessuno hidden ed ovviamente ne ha trovato un altro numero. Veniamo ora al programma java. Con una piccola modifica (che non pubblichero' per evitare continui scorni), ho ottenuto i risultati seguenti (riporto anche quelli del tuo programma, anche se fuori concorso perche' errato - serve solo per riferimento con i tempi): Codice:
C:\LastMessageInForum>ptime ViciudFindFile64 c:\ ptime 1.0 for Win32, Freeware - http://www.pc-tools.net/ Copyright(C) 2002, Jem Berkes <jberkes@pc-tools.net> === ViciudFindFile64 c:\ === Hidden : 3539 Other : 390305 Total : 393844 Execution time: 13.804 s C:\LastMessageInForum>ptime java -jar ScanDir.jar c:\ ptime 1.0 for Win32, Freeware - http://www.pc-tools.net/ Copyright(C) 2002, Jem Berkes <jberkes@pc-tools.net> === java -jar ScanDir.jar c:\ === Hidden: 1371 Regular:341736 Execution time: 42.025 s C:\LastMessageInForum> Naturalmente, questo taglia la testa al toro, visto che monto un disco da mezzo tera: PASSARE AL C++ NON CONVIENE NEMMENO IN QUESTO CASO!! Si tratta di pochi secondi in piu' per scandire l'intero hard disk, e produrre il risultato CORRETTO (verificato). Questo e' importante, ho deciso di scrivere ancora questo messaggio per evitare che qualcuno, impressionato dalle prestazioni che hai pubblicato, fosse tentato di fare un grave errore, buttare via portabilita', robustezza e tutto il resto, solo per ottenere una prestazione migliore. Non c'e' alcuna prestazione migliore. D'altronde era ragionevole: si tratta di una chiamata di sistema, ed effettuarla da C++ invece che da Java non dovrebbe cambiare troppo, no? L'unica cosa che cambia, e' che Java qualcosa di piu', ovvero un sistema piu' robusto di controllo degli accessi (i.e. le eccezioni di cui parlavi), che giustifica l'overhead. Per inciso: questa e' solo la prima prova, e' scontato che possa migliorare ancora i tempi, ma non era questo lo scopo. E poi, come dicevo, ho una cosa importante da fare
__________________
In God we trust; all others bring data |
|
![]() |
![]() |
![]() |
#72 |
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Ad ogni modo: come sempre, il tuo programma C++ e' SBAGLIATO. Succede, quando si scrive software per umiliare gli altri, dev'esserci una specie di legge del contrappasso informatico.
Meglio scriverlo ancora: SBAGLIATO. Nella mia directory di test avevo 9 files, nessuno hidden ed ovviamente ne ha trovato un altro numero. L'unica cosa che mi sono dimenticato è che il mio programma conta anche le cartelle nascoste, non soltanto i file. Che sia sbagliato lo dici tu. Io ho effettuato parecchie prove e funziona perfettamente. E che io voglia umiliare qualcuno lo dici tu. Non mi sono mai sognato di umiliare nessuno e tantomeno Vicius che, nonostante le discussioni accese e i litigi, mi sta simpatico. Avevo chiesto, a Vicius, di postare un suo esempio e m'ha risposto di cercarmelo su JavaDoc. Io quello ho trovato. Tu hai risolto migliorando notevolmente i tempi; posta il codice, nell'interesse generale. ![]() Dai che posto la versione iterativa e confrontiamo i tempi. ![]() Ultima modifica di Vincenzo1968 : 15-03-2013 alle 18:03. |
![]() |
![]() |
![]() |
#73 |
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Eqque qua:
![]() Ho modificato il mio programma in modo da fargli contare solo i file e non anche le cartelle. Come mai la versione Java trova soltanto 86 file quando sono invece 88 come correttamente riportato dalla mia versione C? Ripeto, il programmino Java l'ho copiato dai JavaDoc come consigliatomi da Vicius. Questo? Taglia la testa al toro? ![]() |
![]() |
![]() |
![]() |
#74 |
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
E questo? La taglia la testa al toro?
![]() ![]() |
![]() |
![]() |
![]() |
#75 |
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
Prima di tutto voglio farti notare una piccola incongruenza nei dati che hai riportato oggi. Nella prima prova la versione Java risulta quasi 39 volte più lenta della versione C. In quest'ultima è invece solo 4 volte più lenta. Immagino che entrambi i programmi non abbiano subito modifiche tra le due prove. Ma allora come mai? Prova a pensarci che no è difficile da capire.
![]() Per quanto riguarda il tuo programmino java io avrei usato DirectoryStream. Anche SimpleFileVisitor può andare bene ma è più lento perché legge da solo gli attributi standard di tutti i file che a te non interessano. L'errore grave è stato usare DosFileAttributes. Usando quella classe rendi non portabile il tuo programma su altri sistemi. In java c'è Files.isHidden() che fa già quello in maniera portabile. L'uso di PathMatcher se poi gli passi "*.*" e non dai la possibilità di modificare il pattern è completamente inutile. Se provi a riscriverlo potresti migliorarlo un po' rendendo i tempi simili alla versione C. |
![]() |
![]() |
![]() |
#76 | |
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Quote:
C'è anche la versione Java che, dietro tuo consiglio, mi sono andato a cercare su JavaDoc. Fai le prove e facci sapere. Quindi "il tuo" non è "il tuo" ma "il loro", di JavaDoc. ![]() Non sarebbe il caso di postare un po' di codice a questo punto? ![]() ![]() Ultima modifica di Vincenzo1968 : 17-03-2013 alle 22:44. Motivo: Aggiunta versione C#. |
|
![]() |
![]() |
![]() |
#77 |
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
E comunque, Vicius, già una volta, nel contest 19, mi avevi accusato di barare sui tempi. Poi s'è scoperto, grazie a AnonimoVeneziano, che era un discorso di disco lento sul tuo portatile.
Vabbé che mi stai simpatico, però, vedi di non approfittarne eh! ![]() |
![]() |
![]() |
![]() |
#78 | |
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
Quote:
|
|
![]() |
![]() |
![]() |
#79 | |
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
Quote:
Invece ti ho detto dove secondo me hai sbagliato e cosa potresti fare per migliorare il tuo programma. Sono stato piuttosto costruttivo. |
|
![]() |
![]() |
![]() |
#80 |
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Sul portatilino i tempi migliorano:
![]() ![]() Fino a quando non posterete il codice riterrò validi quest benchmark. E non perché non vi creda. Credo che Sottovento sia riuscito veramente a ridurre notevolmente i tempi dell'applicazione Java(a patto però che faccia restituire il conteggio corretto ![]() ![]() Ultima modifica di Vincenzo1968 : 15-03-2013 alle 22:05. |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 09:44.