Cette source est juste un exercice de style, suite à un post de coulis dans le forum (
http://www.aspfr.com/forum.v2.aspx?ID=570596).
Les statistiques (je stocke la date et le navigateur) sont stockées dans un fichier xml (dont le chemin est dans le web.config? donc pensez à changer ce chemin et à donner les droits qui vont bien? je vous conseille de mettre ce fichier dans le bin de votre webapp).
Le fichier xml est chargé dans un dataset, donc cette source est très facile à adapter si vous voulez utiliser une base de données à la place du fichier xml.
Je sais, c?est tordu comme méthode et pas du tout optimisé, mais pourquoi pas, ça vaut peut-être le coup d?approfondir (en mettant par exemple un dataset en membre statique plutôt qu?un nom de fichier pour éviter de passer notre temps à lire et écrire l?intégralité du fichier xml). Enfin bref, ce n?est qu?un exercice de style, et j?espère que ça va aider un peu coulis.
Les "shared inutiles" sont là pour montrer à quoi ça peut servir. Si tu regardes bien, jamais un objet clsStat n'est instancié, la propriété XmlStatPath n'est affectée qu'une seule fois (au démarrage de l'application), le chemin du fichier xml n'est pas mis en session ou sauvegardé ailleurs... et pourtant... a chaque fois qu'on demande où se trouve ce fichier on le trouve... à méditer ;-)
Je ne crée pas un fichier xml à chaque fois que l'application démarre, je le crée s'il n'existe pas (pour bien faire il faudrait vérifier aussi si le fichier existant et correct en le validant avec une dtd ou un schéma).
Pour la suite, le SQL oui (mais quand on poste une source c'est toujours chiant, c'est pour ça que j'utilise souvent du xml comme source de données), les perfs, la sérialisation oui, mais là on est très loin de la source de coulis, et le but n'etait de faire un appli pour gérer les stats, mais juste de s'amuser un peu à partir de sa source en espérant l'aider un peu.
Bonne nuit à toi,
TiK
pourquoi tu initialises le chemin dans le global.asax ? la je comprend pas trop. Tu peux directement recuperer le chemin dans ta sub partial
Dim voDataSet As New DataSet
dim XmlStatPath = System.Configuration.ConfigurationSettings.AppSettings("XmlStatPath").ToString()
voDataSet.ReadXml(XmlStatPath)
ca devrait être bon.
et aussi pourquoi tu créer un nouveau fichier à chaque fois que l'application démarre ? si pendant 15min (par défaut je crois) tu n'as plus aucune session active, l'application s'arrete, et à la prochaine requete tu écrases tes stats :/
Donc le startApplication je le ferais dans le addSession. Si il y a un fichier on charge le dataset sinon on créer si il y a erreur, on supprime et on créer un nouveau fichier.
Mais le mieux est quand meme mettre tout ca dans SQL ... et puis pas besoin de dataset :'( tu créer un simple objet :
public class Stat
{
public string IP;
public string browser;
public Date date;
}
A partir de la si tu bosses avec SQL, tu fais une procédure qui prend en paramètre un objet stat et tu rajoute les 3champs dans la base
sinon tu créer un objet qui hérite de collectionBase
[serializable]
public class statCollection : collectionbase
{
public stat Add(string IP, string browser, Date d) // ajout dans l'arraylist interne
}
Ensuite tu n'as plus qu'a serialiser et enregistrer le xml :)
deja niveau perf ca va etre beaucoup plus leger que le dataset ! et tu peux le binder de la meme facon à un datagrid (il me semble)
En esperant que mon commentaire veuille dire quelque chose ,)
Cyril
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.