voidOnStart()
{
// Print("используется памяти до закачки истории: "+string(MQLInfoInteger(MQL_MEMORY_USED))+" Mb");Print("используется памяти до закачки истории: "+string(TerminalInfoInteger(TERMINAL_MEMORY_USED))+" Mb");
MqlTick items[];
ulong t0=GetMicrosecondCount();
uint count=CopyTicks(Symbol(),items,COPY_TICKS_INFO,0,1 e7);
t0=GetMicrosecondCount()-t0;
Print ("Загружено за "+string(t0/1000)+" миллисекунд "+ (string)count+ " тиков");
// Print("используется памяти после закачки истории: "+string(MQLInfoInteger(MQL_MEMORY_USED))+" Mb");Print("используется памяти после закачки истории: "+string(TerminalInfoInteger(TERMINAL_MEMORY_USED))+" Mb");
ArrayFree(items);
// Print("используется памяти после ArrayFree: "+string(MQLInfoInteger(MQL_MEMORY_USED))+" Mb");Print("используется памяти после ArrayFree: "+string(TerminalInfoInteger(TERMINAL_MEMORY_USED))+" Mb");
}
Le résultat est sur un Terminal qui fonctionne depuis longtemps. Aucun EA/indicateur en cours. Deux graphiques, barres M1 pour l'année en cours uniquement.
используется памяти до закачки истории: 1043 Mb
Загружено за 11223 миллисекунд 10000000 тиков
используется памяти после закачки истории: 1675 Mb
используется памяти после ArrayFree: 1102 Mb
60Mb n'ont pas été libérés. Un terminal vide consomme plus d'un gigaoctet. La seule façon de réduire la consommation est de recharger le terminal.
Bonjour, merci beaucoup. Je n'ai pas encore utilisé l'opérateur new car logiquement il doit être plus lent que ArrayResize avec la mémoire réservée. Mais je suis impressionné par les résultats obtenus, il s'avère que c'est l'inverse, le tableau natif via l'opérateur new est plus rapide.
MT5 (build 2363) :
Diffusé dans la version bêta 2364 (malheureusement, il y a une erreur de compilation pour new T() à l'intérieur du modèle).
Voici les logs de votre script :
2020.03.1910:39:45.784 Test (EURUSD,H1) AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
2020.03.1910:39:46.765 Test (EURUSD,H1) Test Class ArrayResize all : loops=1000 ms=9842020.03.1910:39:48.233 Test (EURUSD,H1) Test Class ArrayResize one by one with reserved memory : loops=1000 ms=14692020.03.1910:39:49.944 Test (EURUSD,H1) Test Class ArrayResize one by one with newoperator : loops=1000 ms=17032020.03.1910:39:50.923 Test (EURUSD,H1) Test Class ArrayResize all : loops=1000 ms=9692020.03.1910:39:52.392 Test (EURUSD,H1) Test Class ArrayResize one by one with reserved memory : loops=1000 ms=14842020.03.1910:39:54.100 Test (EURUSD,H1) Test Class ArrayResize one by one with newoperator : loops=1000 ms=17032020.03.1910:39:55.079 Test (EURUSD,H1) Test Class ArrayResize all : loops=1000 ms=9852020.03.1910:39:56.548 Test (EURUSD,H1) Test Class ArrayResize one by one with reserved memory : loops=1000 ms=14692020.03.1910:39:58.258 Test (EURUSD,H1) Test Class ArrayResize one by one with newoperator : loops=1000 ms=17032020.03.1910:39:59.237 Test (EURUSD,H1) Test Class ArrayResize all : loops=1000 ms=9842020.03.1910:40:00.705 Test (EURUSD,H1) Test Class ArrayResize one by one with reserved memory : loops=1000 ms=14692020.03.1910:40:02.416 Test (EURUSD,H1) Test Class ArrayResize one by one with newoperator : loops=1000 ms=1703
Vous pouvez voir que ArrayResize pour les objets a commencé à fonctionner plus rapidement.
Une fois de plus, la complexité d'une partie de la fonction ArrayResize a été réduite d'un logarithme à zéro
Ilyas: Nous pouvons voir que ArrayResize pour les objets est plus rapide maintenant. Une fois encore, nous avons réussi à réduire la complexité d'une partie de la fonction ArrayResize d'un logarithme à zéro.
J'ai réussi à comparer la vitesse de ArrayResizeReserve et ArrayOnNew sur un projet réel pour le type de données - classe avec un seul champ int, nombre d'enregistrements 20M.
Dans MT5 (build 2363), pour tous les paramètres comparés sauf un, ArrayOnNew était pire que ArrayResizeReserve :
Accès en lecture/écriture (std::fill_n, std::copy, std::vector::clear) : 2-2,5 fois plus lent Création de tous les éléments en une fois (std::vector::resize) pour la mémoire "froide"/"chaude" - 1,1-1,2 fois plus lent Création de tous les éléments un par un (std::vector::push_back) pour la mémoire "chaude" - 1,2 fois plus rapide
Bogue MT5 (build 2363) Mauvaise correspondance des priorités d'exécution des fonctions modèles en MQL par rapport aux fonctions modèles en C++(en ligne:https://onlinegdb.com/HkNqBDZ88). Le problème se pose lorsque la première fonction "test" contient une classe de base de modèle entièrementspécialisée comme argument, et la seconde fonction "test" surcharge la première, est une fonction template et contient une classe de base template non spécialisée comme argument.
Bonjour à tous ! !! Question : J'utilise deux plateformes MT4 et MT5 sur mon copyutera. MT4 s'est connecté au signal sans aucun problème. Mais je ne peux pas me connecter à un autre signal à partir de MT5. J'ai un compte et le mouvement des fonds est affiché, mais il n'y a pas de numéro de compte dans le compte, je n'ai pas de bouton de signal dans le tableau de bord du terminal. J'ai loué un serveur, vps, j'ai écrit que j'ai besoin de migration, mais le bouton de migration ne fonctionne pas. Dites-moi pourquoi.
Anna: Bonjour à tous ! !! Ma question est la suivante : j'utilise deux plateformes MT4 et MT5 sur mon copyutera. Je me suis connecté au signal de MT4 sans aucun problème. Mais je ne peux pas me connecter à un autre signal à partir de MT5. J'ai un compte et le mouvement des fonds est affiché, mais il n'y a pas de numéro de compte dans le compte, je n'ai pas de bouton de signal dans le tableau de bord du terminal. J'ai loué un serveur, vps, j'ai écrit que j'ai besoin de migration, mais le bouton de migration ne fonctionne pas. Dites-moi pourquoi.
MetaTrader 5 (pour la location de l'hébergement virtuel intégré au terminal) nécessite un système d'exploitation 64 bits.
sous Win 10, est-ce que quelqu'un connecte des agents locaux ?
J'ai essayé de connecter 2 PC, l'agent distant est constamment prêt-connecté-ready-connecté... pas d'emplois.
J'ai jeté un coup d'œil dans le pare-feu, je pense qu'il y a une case à cocher pour Metatrader Agent, l'exportation - l'importation de l'agent via le fichier voit les ports et le nom du PC également.
Je pense que je dois faire suivre les ports ailleurs ?
Il est préférable de faire un téléchargement automatique comme par CopyRates.
Dans ce cas, le délai est inconnu. Le téléchargement est initié par une demande de symbole de période.
Examinez ce qui peut être fait
pas remarqué.
Il faut regarder ce que le terminal consomme.
Le résultat est sur un Terminal qui fonctionne depuis longtemps. Aucun EA/indicateur en cours. Deux graphiques, barres M1 pour l'année en cours uniquement.
60Mb n'ont pas été libérés. Un terminal vide consomme plus d'un gigaoctet. La seule façon de réduire la consommation est de recharger le terminal.
Bonjour, merci beaucoup.
Je n'ai pas encore utilisé l'opérateur new car logiquement il doit être plus lent que ArrayResize avec la mémoire réservée.
Mais je suis impressionné par les résultats obtenus, il s'avère que c'est l'inverse, le tableau natif via l'opérateur new est plus rapide.
MT5 (build 2363) :
Diffusé dans la version bêta 2364 (malheureusement, il y a une erreur de compilation pour new T() à l'intérieur du modèle).
Voici les logs de votre script :
Vous pouvez voir que ArrayResize pour les objets a commencé à fonctionner plus rapidement.Une fois de plus, la complexité d'une partie de la fonction ArrayResize a été réduite d'un logarithme à zéro
Nous pouvons voir que ArrayResize pour les objets est plus rapide maintenant.
Une fois encore, nous avons réussi à réduire la complexité d'une partie de la fonction ArrayResize d'un logarithme à zéro.
J'ai réussi à comparer la vitesse de ArrayResizeReserve et ArrayOnNew sur un projet réel pour le type de données - classe avec un seul champ int, nombre d'enregistrements 20M.
Dans MT5 (build 2363), pour tous les paramètres comparés sauf un, ArrayOnNew était pire que ArrayResizeReserve :
ces liens dans l'aide (éditeur) mènent à une page non trouvée
Le problème se pose lorsque la première fonction "test" contient une classe de base de modèle entièrementspécialisée comme argument,
et la seconde fonction "test" surcharge la première, est une fonction template et contient une classe de base template non spécialisée comme argument.
Bonjour à tous ! !! Ma question est la suivante : j'utilise deux plateformes MT4 et MT5 sur mon copyutera. Je me suis connecté au signal de MT4 sans aucun problème. Mais je ne peux pas me connecter à un autre signal à partir de MT5. J'ai un compte et le mouvement des fonds est affiché, mais il n'y a pas de numéro de compte dans le compte, je n'ai pas de bouton de signal dans le tableau de bord du terminal. J'ai loué un serveur, vps, j'ai écrit que j'ai besoin de migration, mais le bouton de migration ne fonctionne pas. Dites-moi pourquoi.
MetaTrader 5 (pour la location de l'hébergement virtuel intégré au terminal) nécessite un système d'exploitation 64 bits.
sous Win 10, est-ce que quelqu'un connecte des agents locaux ?
J'ai essayé de connecter 2 PC, l'agent distant est constamment prêt-connecté-ready-connecté... pas d'emplois.
J'ai jeté un coup d'œil dans le pare-feu, je pense qu'il y a une case à cocher pour Metatrader Agent, l'exportation - l'importation de l'agent via le fichier voit les ports et le nom du PC également.
Je pense que je dois faire suivre les ports ailleurs ?
MetaTrader 5 (pour le bail d'hébergement virtuel intégré au terminal) nécessite un système d'exploitation 64 bits.