ORDA Ralentissement des recherches si table avec champ WritePro

4D V17.0 à V17R3

Bonjour à tous,

Je constate un fort ralentissement des recherches en mode client serveur lorsque la table sur laquelle porte la recherche contient un champ objet contenant un document 4D Write pro. Ceci bien que la recherche et l’affichage ne portent nullement sur le champ en question.

J’ai donc fait un petit test avec une recherche qui affiche une liste de 179 enregistrements pour une table de 369. Tout étant égal par ailleurs.

Où est le problème ?

D’avance merci.

Bonne soirée

<code 4D>
C_OBJET($selModeles)
C_ENTIER LONG($b)

$selModeles:=ds.Modeles_textes.all()

Chronomètre (“Depart”;Faux)
$selModeles:=ds.Modeles_textes.query("Type
= :1";“Devis Clients”).orderBy(“Libelle asc”)
_Chronomètre (“Fin recherche”;Faux)
$b:=Créer fenêtre formulaire(“Courrier_ListBox_V2”;5;100;71)
DIALOGUE(“Courrier_ListBox_V2”;Créer objet(“liste”;$selModeles))
_Chronomètre (“Retour”;Vrai)

// Temps en ms
// ** Mono poste
// 0 : Fin recherche
// 19 : Affichage liste en mode entitySelection
// 510 : Retour (Après échappement)

// ** Client serveur
// 9736 : Fin recherche
// 9751 : Affichage liste en mode entitySelection
// 10270 : Retour (Après échappement)

Chronomètre (“Depart”;Faux)
CHERCHER([Modeles_textes];[Modeles_textes]Type
=“Devis Clients”)
TRIER([Modeles_textes];[Modeles_textes]Libelle;>)
_Chronomètre (“Fin recherche”;Faux)
$b:=Créer fenêtre formulaire(“Courrier_ListBox”;5;100;71)
DIALOGUE(“Courrier_ListBox”)
_Chronomètre (“Retour”;Vrai)

// Temps en ms
// ** Mono poste
// 0 : Fin recherche
// 11 : Affichage liste en mode sélection
// 495 : Retour (Après échappement)

// ** Client serveur
// 110 : Fin recherche
// 121 : Affichage liste en mode sélection
// 610 : Retour (Après échappement)

</code 4D>

Ne tenez pas compte de la ligne 4 que j’ai oublié de retirer

Salut,

Je pense que la réponse générale que tu vas avoir sera une question : quel est le code mis en œuvre !

Je prépare une base exemple

La base est-elle préemptive :?:

Un core (unité de CPU) ne peut faire qu’une seule chose à la fois même s’il peut jongler avec les process et simuler de les exécuter en même temps.

Donc, le mieux serait de séparer les taches : une par core; donc, que tes process soient exécutés en mode préemptif. (et non plus coopératif c.-à-d. tous exécuter sur un seul core)

Après, il faut vérifier qu’il n’y ait pas un autre goulot d’étranglement, si tes 2 taches doivent accéder par exemple au disque dur (ou à une même ressource) en même temps, ben ce n’est pas possible ; dans ce cas, c’est l’OS qui arbitrera et allouera du temps pour chaque process ou core.

Et dans ce domaine les OS peuvent être plus ou moins performants/efficaces.

Il faudrait donc analyser ce que tu cherches à faire et qu’est-ce qui ralenti le processus.

Voici
https://forums.4d.com/4DBB_Main/x_User/3916/files/30501117.zip