question sur les threads [java] - Java - Programmation
Marsh Posté le 08-12-2002 à 19:40:25
C pas une question de sollicitation du CPU, ça!! Essaie juste de faire la conversion de ton fichier dans un autre thread : le thread principal pourra s'occuper de l'affichage pendant ce temps!
Marsh Posté le 08-12-2002 à 21:38:33
gfive a écrit : C pas une question de sollicitation du CPU, ça!! Essaie juste de faire la conversion de ton fichier dans un autre thread : le thread principal pourra s'occuper de l'affichage pendant ce temps! |
ok g transformé mon truc en thread, ca marche nickel
le pb ce que je suis obligé de créer un objet pour lancer mon thread, alors qu'en fait j'utilise juste une méthode déclarée statique, et créer un objet ca fait pas propre.
alors question : comment on fait pour lancer un thread sans avoir a créer d'objet. pour l'instant g ca :
Thread convertThread = new Thread(new BDDEmlToTxt(filtre.getSpamDir(),filtre.getBDDSpamDir(),filtre));
convertThread.start();
on peut pas lancer un thread qui lancera juste une méthode statique?
Marsh Posté le 08-12-2002 à 23:06:02
ToNToN SoNiC a écrit : |
Comprends pas...
Tu peux toujours implémenter l'interface Runnable et rediriger run vers ta fonction statique (!)
Marsh Posté le 08-12-2002 à 23:07:56
beh c'est ce que je fais
mais dans ma ligne :
Thread convertThread = new Thread(new BDDEmlToTxt(filtre.getSpamDir(),filtre.getBDDSpamDir(),filtre));
je met quoi alors pour ne pas avoir a creer d'objet BBDEmlToTxt?
Marsh Posté le 09-12-2002 à 08:51:32
bah......Tu fais un vrai truc propre : tu fais une classe Runnable, qui fait ta conversion, au lieu de la faire dans une méthode statique!
Marsh Posté le 09-12-2002 à 12:39:52
Marsh Posté le 09-12-2002 à 15:09:35
Je pense qu'il ne comprend pas la question de base lui aussi
Marsh Posté le 09-12-2002 à 15:13:11
gfive a écrit : Hein?? Keskia, Dark?? |
bin il veut faire un thread sans créer d'objet ... Iléfou !!
Marsh Posté le 09-12-2002 à 15:18:06
simple :
tu installes jython (une implémentation java de python), pis tu fais :
Code :
|
indice : ce n'est pas une bonne idée, et ca utilisera certainement un bon paquet d'objets derriere ton dos
Marsh Posté le 09-12-2002 à 15:23:01
lorill a écrit : simple :
|
oui bin c'est ca que je voulais dire hein
Marsh Posté le 09-12-2002 à 15:23:57
DarkLord a écrit : |
hu ?
tu voulais lui dire d'utiliser jython
et puis si on a plus le droit de répondre des conneries en faisant un peu de pub au passage
Marsh Posté le 09-12-2002 à 15:29:14
lorill a écrit : |
non que y a toujours moyen de contourner avec la déclaration de l'objet direct ou autre mais que ca va quand meme au finish utiliser des objets dans ton dos ... Que ce soit jython ou pas ... Et sinon tu peux faire toutes les pubs que tu veux hein, du moment que c'est pas pour developpez.com
Marsh Posté le 09-12-2002 à 15:31:55
DarkLord a écrit : |
je viens de vérifier, y'a pas de section python, ni ruby, donc y'a peu de risques
Marsh Posté le 09-12-2002 à 15:40:04
lorill a écrit : |
ah bon?
Marsh Posté le 09-12-2002 à 16:13:14
oki oki stop the fight
g refait un truc propre, qui marche donc c bon j'y toucherais plus
merci kan meme
Marsh Posté le 09-12-2002 à 16:14:31
ToNToN SoNiC a écrit : oki oki stop the fight |
qui se fight ici
Marsh Posté le 09-12-2002 à 16:18:04
DarkLord a écrit : |
les trucs avec jython et cie... spa encore de mon nivo je crois
Marsh Posté le 09-12-2002 à 16:19:02
ToNToN SoNiC a écrit : |
c'était juste une connerie
Marsh Posté le 09-12-2002 à 16:23:51
lorill a écrit : |
bon ca va alors
sinon dernière petite question tant que je vous tiens :
c quoi la classe permettant l'acces le plus rapide à un fichier de caractere. pour l'instant j'utilise BufferedReader (FileReader)
en fait g un mot, je veux le comparer a une liste de mot contenu dans un fichier texte. les mots sont séparés par \n
pour l'instant j'utilise ca et je fais readline mais c loooooooooooonnnnng
y'a rien de plus rapide ? (meme si c plus bourrin)
Marsh Posté le 09-12-2002 à 16:28:39
lire le fichier une seule fois et garder les données en mémoire
Marsh Posté le 09-12-2002 à 16:32:10
oui mais en faisant readline je le lit qu'une seule fois?
Marsh Posté le 09-12-2002 à 16:40:02
ToNToN SoNiC a écrit : oui mais en faisant readline je le lit qu'une seule fois? |
ouais mais t'es pas obligé de t'arreter à chaque mot ... Lire ton fichier en un passe et puis le traiter en mémoire c'est vachement plus efficace que de lire un peu, traiter, lire un peu, traiter, ...
Enfin faut pas que ton fichier soit trop gros non plus hein. Pas 56Mo hein el_gringo ?!
Marsh Posté le 09-12-2002 à 16:49:50
non non
juste un fichier de 4ko
le probleme c que g environ 60 fichiers à traiter, donc ca devient vite tres lourd
donc tout lire en une passe, mettre ca dans un String[], ca serait plus efficace?
mais pour le lire en une passe, readline kan meme?
Marsh Posté le 09-12-2002 à 16:55:08
ToNToN SoNiC a écrit : |
bin non ... lire avec un buffer de 1024Ko par exemple ca peut le faire ...
Marsh Posté le 09-12-2002 à 17:04:51
ok ok ok
mmm moi je veux bien...
donc la je lis plus des strings, mais carrement de la donnée brut
que apres je retransforme en mot...
arf...
EDIT : y'a marqué ca sur java.sun.com :
In general, each read request made of a Reader causes a corresponding read request to be made of the underlying character or byte stream. It is therefore advisable to wrap a BufferedReader around any Reader whose read() operations may be costly, such as FileReaders and InputStreamReaders. For example,
BufferedReader in
= new BufferedReader(new FileReader("foo.in" ));
will buffer the input from the specified file. Without buffering, each invocation of read() or readLine() could cause bytes to be read from the file, converted into characters, and then returned, which can be very inefficient.
ca veut bien dire que des qu'on ouvre le fichier, il le bufferise avec la taille de buffer par défaut, et apres readline() lit sur le buffer?
donc c déja en memoire non?
Marsh Posté le 09-12-2002 à 17:22:05
yeah!
grace a vous g trouvé mon erreur!
trop long a vous expliquer mais merci kan meme !!
g gagné 90% de temps d'execution strop fort!!
DANKE THANKS MERCI!
Marsh Posté le 09-12-2002 à 17:28:04
ToNToN SoNiC a écrit : yeah! |
bin explique alors ... Que ca serve aux autres qd meme ...
Marsh Posté le 09-12-2002 à 17:37:39
DarkLord a écrit : |
bon ok
alors en gros ce que je devais faire, c'est comparer chaque mot d'un mail .eml a plusieurs fichiers d'une base de données
donc ca devient vite tres lourd, surtout quand tu as 200 mails a traiter.
mon raisonnement :
- tu prends un mot du mail
- tu le compare a chaque mot de chaque fichier de la base de données
- tu passe à un autre mot
mon erreur c'était de créer un new BufferedReader(new FileReader("fichier de la bdd" ));
a chaque fois que je passais dans ma boucle de comparaison de mot
donc en fait :
je prends un mot
je prends le 1er fichier de la base de données
j'ouvre un bufferedReader
je compare avec tout les mots du fichier
je ferme mon bufferedReader
je prends le 2eme fichier de la base de données
j'ouvre un bufferedReader
je compare avec tout les mots du fichier
je ferme mon bufferedReader
...
.
je prends le deuxieme mot
et rebellote
alors forcement l'interet du buffer est TRES LIMITE
donc g fait un tableau de BufferedReader
j'ouvre une fois tout mes bufferedReader avec tout mes fichiers
je fais mes comparaisons
et je ferme tout
résultat --> au lieu de 30 seconde pour traiter un mail, il me prends 1/2 seconde!!!
B O N H E U R
donc merci a vous cos vous m'avez bien aiguiller avec vos histoires de buffers
donc re-DANKE
Marsh Posté le 09-12-2002 à 19:57:34
j'ai pas tout lu, mais tu parles d'essayer de rendre la lectture plus performante avec un BufferedReader. Tu peux par exemple fixer la taille du buffer : public BufferedReader(Reader in, int sz). en mettant un size bienn grosse (10000), il lira ton ficher par gros bloc, donc sans changer ton algo (while(readLine)) ca optimize déjà bien ...
Marsh Posté le 09-12-2002 à 20:02:11
benou a écrit : j'ai pas tout lu, mais tu parles d'essayer de rendre la lectture plus performante avec un BufferedReader. Tu peux par exemple fixer la taille du buffer : public BufferedReader(Reader in, int sz). en mettant un size bienn grosse (10000), il lira ton ficher par gros bloc, donc sans changer ton algo (while(readLine)) ca optimize déjà bien ... |
oui j'avais vu ca sur le site java.sun.com, mais bon, la ca va tellement vite que ca ne va pas changer grand chose
ca y'est mon proj est fini et marche 10²²² fois mieux qu'avant, donc je suis happy tonight, c glop
Marsh Posté le 08-12-2002 à 00:24:35
le pb est décrit dans mon 2eme post...
Message édité par tonton sonic le 08-12-2002 à 21:39:51
---------------
Et?