Implementation performante - C++ - Programmation
Marsh Posté le 15-01-2003 à 17:03:56
Utilise des fichiers mappes en memoire: fonction "mmap" sous UNIX et "CreateFileMapping & MapViewOfFile" sous Windows.
Tu n'as pas a allouer la memoire pour lire le fichier, tout est gerer par le systeme, c'est plus elegant et souvent bcp plus efficace que ce que tu peux faire toi meme.
J'ai implemente rescemment un convertisseur de fichier; il va 2fois plus vite en utilisant des map plutot qu'en lisant le fichier a convertir de maniere "classique". Et en plus, le code est plus simple.
Marsh Posté le 15-01-2003 à 17:30:15
Une fois que j'ai envoyé mes données, si je reçois une autre reqûete qui me demande d'envoyer les mêmes data, comment je fais si je n'ai rien en mémoire (au moins un index) => il faudra refaire tout le traitement ?
A+;
Marsh Posté le 15-01-2003 à 17:37:44
C'est a toi de voir: Si tu estimes que tu qs peu de donnees a stocker, tu peux te debrouiller pour creer une arborescence de tes donnees en memoire, et les envoyer directement sans traitement si une nouvelle requette se presente.
Mais si ton traitement est tres court (genre moins d'une seconde), ca ne vaut vraiment pas la peine de t'embetter. Ne stocke rien, et refait le traitement a chaque fois.
Si ca dure 10minute a chaque fois, evidemment... faut voir. Mais la, a moins que ton fichier ne fasse 1Go, si le traitement est aussi long, il faut surement revoir ton code!
Marsh Posté le 15-01-2003 à 17:58:07
Les fichiers font 15 Mo max , mais le problème c'est que c'est une application multi-threadée : j'ai +ieurs clients qui vont me demander de transferer des data (dont certains les mêmes).
La taille des fichiers est raisonnable, mais je dois envoyer simultanement à plusieurs clients (100 clients) les données demandées.
A+;
Marsh Posté le 15-01-2003 à 18:07:43
yanis97 a écrit : Les fichiers font 15 Mo max , mais le problème c'est que c'est une application multi-threadée : j'ai +ieurs clients qui vont me demander de transferer des data (dont certains les mêmes). |
Solution la plus simple: Chaque thread client map le fichier a lire en lecture. Je pense que ca ne pose pas de probleme.
Et chaque client traite donc les datas de ce fichier a chaque demande. ca devrait fonctionner vu qu'il n'y a pas de probleme d'access concurrents quand on est en lecture (sauf si le fichier est ouvert en "share denied" ).
Optimise bien le code qui va traiter les fichiers. Un fichier de 15Mo doit se lire et se traiter en 1 ou 2sec max sur une machine de puissance moyenne (1Ghz), a moins d'etre oblige de faire une analyse complexe a chaque parti du fichier lu, ce aui n'est pas ton cas il me semble.
Marsh Posté le 15-01-2003 à 15:25:01
Bonjour;
Je souhaite réaliser une application en C++ qui va lire des données stockèes ds des fichiers binaires (certaines data sont codèes sur 2 octets en BCD d'autres sur une longueur de plusieurs octets).
Une fois ces données récupérées, je dois les découper en segments de 32 KO et les envoi via X.25.
Question : quelle est la meilleure implémentation pour réaliser ce traitement : lire, récupérer et découper, en sachant que ce traitement est susceptible de se répéter plusieurs fois (il se peut que j'envoi les data d'un fichier F1, ensuite F2 et ensuite je reviens sur F1, etc...).
EN vous remerciant.