IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

Stocker des données en cache


Sujet :

Langage Delphi

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Chargé de référencement
    Inscrit en
    Mars 2019
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chargé de référencement

    Informations forums :
    Inscription : Mars 2019
    Messages : 9
    Points : 7
    Points
    7
    Par défaut Stocker des données en cache
    Bonjour, je ne trouve pas la solution pour stocker des données en cache en Delphi (équivalent apc ou memcached en PHP)
    Je souhaiterai mettre en cache les traductions des termes utilisés sur le site.
    Mon site compte 3 langues et actuellement je lis ces traductions dans un fichier xml. merci pour votre aide !

    Lauriane

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 119
    Points : 41 252
    Points
    41 252
    Billets dans le blog
    63
    Par défaut
    Bonjour et bienvenue,

    Je suis désolé d'écrire que, pour moi, les renseignements fournis sont loin d'être suffisants
    Vous n'indiquez pas votre version de Delphi, la technique que vous utilisez pour votre site (d'ailleurs par site qu'est-ce qui est vraiment entendu par ce terme ?), la technique que vous utilisez pour lire le fichier XML etc.
    Difficile dans ces conditions de donner des pistes sachant qu'en plus il y a des possibilités d'internationalisation d'application Delphi ne passant pas par XML ...

  3. #3
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 586
    Points : 25 262
    Points
    25 262
    Par défaut
    En Delphi, une approche simpliste serait tout simplement de chargé les traductions dans une TStringList triée, la propriété Objects[] donnant accès à une autre TStringList de la forme Lang=Valeur
    Cette TStringList étant chargée au démarrage du serveur ou lors de la première connexion (avec une capacité d'invalidation au besoin)
    Une Section Critique pouvant être utile pour protéger à l'écriture (après une invalidation)

    Si ton "site" est une site Web, dans ce cas, autant utiliser des technologies de mise en cache conçu pour le web

    Sinon, un Serveur Web en Delphi fonctionne très différemment qu'un Serveur Web Apache PHP,
    En Delphi, tu peux gérer ta mémoire au niveau Process et au niveau Thread pour justement avoir des données pré-chargées
    En PHP, tu n'as que la mémoire au niveau Session (Thread) d'où l'utilité du Cache

  4. #4
    Futur Membre du Club
    Femme Profil pro
    Chargé de référencement
    Inscrit en
    Mars 2019
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chargé de référencement

    Informations forums :
    Inscription : Mars 2019
    Messages : 9
    Points : 7
    Points
    7
    Par défaut mémoire au niveau Process
    Merci pour ta réponse, mais justement, comment gérer en delphi la mémoire au niveau Process ?

    Mon but est simple, cependant je suis toujours incapable de réaliser cette tâche: garder une valeur en cache.

    Pour comparer avec un langage moderne et puissant, le PHP, je veux faire l'équivalent de:

    // Je stocke ma variable en cache
    $bar = 'BAR';
    apc_store('foo', $bar);

    puis sur une autre page, j'affiche la valeur stockée:
    $tmp = apc_fetch('foo');
    print_r($tmp);

  5. #5
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 586
    Points : 25 262
    Points
    25 262
    Par défaut
    En Delphi, la gestion mémoire est par défaut au Process
    Il est exceptionnel de créer une threadvar
    Je ne comprends pas comment tu peux avoir des difficultés à gérer de la mémoire au niveau Process puisque c'est le fonctionnement par défaut.

    C'est juste une question de accessibilité (portée & visibilité) des variables et membres d'instance
    Tu peux pousser plus loin en maitrisant le cycle de vie des instances dans une pratique rigoureuse de la POO et encore mieux les Patrons de Conception ...
    Je te conseille de te documenter sur la gestion mémoire de Delphi,
    aussi bien en mode procédural avec des variables globales comme on le ferait en C
    Ou sur la programmation orienté objet et des concepts comme on le ferait en C++ ou en Java
    En Delphi, tu es libre de ta méthode de programmation

    Mais dans notre époque moderne, partons sur la POO

    Un Singleton par exemple permet une visibilité totale et un cycle de vie infinie
    si tu ne connais pas ces concepts, je te recommande de la lecture ces concepts en PHP (depuis 2005).

    Je t'invite à lire une approche POO de la gestion de mémoire en PHP pour transmettre des données entre deux requêtes issu du même utilisateur (même session).

    Comme on ignore la version que tu utilises, difficile de te donner l'implémentation la plus élégante en fonction de ta version pour ce Singleton

    Commençons par Delphi 1 sorti en 1995 (même année que PHP 1)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    var
      Cache: TStringList;
     
    procedure Write();
    begin
      Cache.Add('foo=BAR');
    end
     
    procedure Read();
    begin
      ShowMessage(Cache['foo']);
    end;
     
    initialization
      Cache := TStringList.Create();
     
    finalization
      Cache.Free();
    La variante ci-dessus est II. Utilisation d'une variable globale




    En Delphi 7 sorti en 2002, tu peux écrire tout cela d'au moins 4 manières différentes pour être de plus en plus POO en respectant Design Pattern Comment implémenter un Singleton avec Delphi 7


    D'ailleurs apc_store et apc_fetch ne sont apparus en PHP qu'en 2005 pour que ce langage de script puisse stocker des valeurs au niveau Process alors que son mode de mémoire par défaut est au mode thread (requête et session)
    C'est l'avantage et désavantage d'un langage de script où l'on ne maitrise pas la mémoire mais juste des variables non typées, cela peut sembler frustrant mais c'est pour dispenser le développeur de réfléchir à ces problématiques et lui fournir un environnement assisté qui fera le travail nettement mieux que lui lorsque l'on envisage que le moteur peut fonctionner sur un multitude d'OS ayant chacun une approche différente de la mémoire.


    Mais on peut aussi utiliser une version un peu moins ancienne comme Delphi XE2 sorti en 2012 : Design Pattern : Singleton - Découverte des Génériques et Class Constructor

  6. #6
    Futur Membre du Club
    Femme Profil pro
    Chargé de référencement
    Inscrit en
    Mars 2019
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chargé de référencement

    Informations forums :
    Inscription : Mars 2019
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Merci beaucoup pour ta réponse ! Je vais étudier cela.. Je travaille dans une entreprise qui utilise Delphi. Je trouve le développement complexe.. Mais ça tient beaucoup à la structure générale du code. Ils n'utilisent pas d'objets par exemple.

    J'avais fait des essais avec TStringList mais ma valeur n'était pas gardée d'une page à l'autre. ça m'étonne que tu dises que par défaut la valeur doit être stockée. Je vais regarder tes liens et ce que tu me dis. Encore mille merci !

  7. #7
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 586
    Points : 25 262
    Points
    25 262
    Par défaut
    Citation Envoyé par pastiptop Voir le message
    Merci beaucoup pour ta réponse ! Je vais étudier cela.. Je travaille dans une entreprise qui utilise Delphi. Je trouve le développement complexe.. Mais ça tient beaucoup à la structure générale du code. Ils n'utilisent pas d'objets par exemple.
    Cela sent le Delphi 7 avec un vieux code procédural ...
    Ils utilisent surement des objets car Delphi contient pas mal de classe mais ils ne créent pas de nouvelle classe
    Sous Delphi, on est libre mais aujourd'hui, plus jamais je referais un code procédural, tous mes vieux codes ainsi, je vois les classes que j'aurais pu faire et le polymorphisme qui m'aurait évite des Case ou if else if else ...

    Citation Envoyé par pastiptop Voir le message
    J'avais fait des essais avec TStringList mais ma valeur n'était pas gardée d'une page à l'autre. ça m'étonne que tu dises que par défaut la valeur doit être stockée. Je vais regarder tes liens et ce que tu me dis. Encore mille merci !
    Tout dépend où tu as déclaré et quand tu as instancié ta classe

    Et aussi comment la requête est gérée, quel type de serveur c'est ?
    un Serveur autonome
    là c'est le cas si dessus, variable globale et instanciation au cycle de vie complet

    un mode CGI
    tu perds ta mémoire Process à chaque requête, tu vas devoir trouver un système de cache par fichier par exemple, un ActiveX partagé ou encore un Service Windows qui gère de la mémoire partagée
    Ou encore étudier si il existe des outils pour gérer un cache sans que cela soit lié à un langage bien précis mais cela reviendra surement au possibilité ci-dessus
    Enfin, il doit encore être possible d'utiliser un Cookie côté client qui te remonte les données de session

    une DLL ISAPI avec un IIS
    là il faut tu regardes quand se produise les DLL_PROCESS_DETACH, DLL_THREAD_ATTACH et DLL_THREAD_DETACH (le DLL_PROCESS_ATTACH est implicite c'est le Begin du DPR)
    Pour moi, la DLL reste en mémoire tout le cycle de vie de IIS et donc tu as une mémoire process disponible et partagée entre chaque requête
    Surtout pas de private dans objet de type TWebmodule qui est instancié pour chaque requête (parmi un pool)
    Il faut utiliser une variable globale (protégé par une section critique) pour l'accès par les différents threads liés à chaque requête

  8. #8
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 119
    Points : 41 252
    Points
    41 252
    Billets dans le blog
    63
    Par défaut
    Bonjour,
    Je me trompe ou par "page" vous entendez forme (TForm) ? Je n'arrive toujours pas à savoir s'il s'agit d'une application web ou d'une simple application

  9. #9
    Futur Membre du Club
    Femme Profil pro
    Chargé de référencement
    Inscrit en
    Mars 2019
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chargé de référencement

    Informations forums :
    Inscription : Mars 2019
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Il s'agit d'un site web pas d'une application windows. J'entends par "page", le fais de naviguer sur le site et de perdre la valeur d'une variable que j'aimerai durable.

  10. #10
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 586
    Points : 25 262
    Points
    25 262
    Par défaut
    Au passage, répondre à ma question "quel type de server web" aurait été un plus
    CGI, ISAPI ou Autonome ? autre ?

    Ainsi que la version de Delphi

  11. #11
    Futur Membre du Club
    Femme Profil pro
    Chargé de référencement
    Inscrit en
    Mars 2019
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chargé de référencement

    Informations forums :
    Inscription : Mars 2019
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Merci beaucoup ShaiLeTroll ! J'arrive effectivement maintenant à garder un TStringList en mémoire. je vais regarder de plus près ta réponse. J'ai la volonté de devenir une experte en Delphi. C'est assez déroutant au premier abord.

  12. #12
    Futur Membre du Club
    Femme Profil pro
    Chargé de référencement
    Inscrit en
    Mars 2019
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chargé de référencement

    Informations forums :
    Inscription : Mars 2019
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Serveur IIS

  13. #13
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 586
    Points : 25 262
    Points
    25 262
    Par défaut
    Du coup, c'est résolu

    Il faudrait inventer un autre smiley
    on a :cristal:
    il nous faudrait :cristalok: Nom : MadameIrma.jpg
Affichages : 152
Taille : 6,7 Ko


+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [C#]Comment stocker des données ?
    Par T0xF0x dans le forum Windows Forms
    Réponses: 4
    Dernier message: 19/07/2006, 10h18
  2. [VB]stocker des données de pages web dans une base
    Par tofito dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 15/02/2006, 11h02
  3. [MySQL] Stocker des données dans un tableau
    Par LadyArwen dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 02/02/2006, 10h40
  4. Réponses: 2
    Dernier message: 15/06/2005, 17h32
  5. [XML] stocker des données dans un fichier XML
    Par R3iTt0R dans le forum XML/XSL et SOAP
    Réponses: 5
    Dernier message: 27/05/2005, 16h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo