J'ai un programme C++ qui exécute une fonction. Il charge un grand fichier de données dans un tableau, reçoit un tableau d'entiers et effectue une recherche dans ce tableau, renvoyant un seul entier. J'appelle actuellement le programme avec chaque entier comme argument, comme suit:Communication entre un script ruby et un programme C++ en cours
$ ./myprogram 1 2 3 4 5 6 7
J'ai aussi un script Ruby, et je voudrais que ce script pour utiliser le programme C++. Actuellement, je fais cela comme ça.
code Ruby:
arguments = "1 2 3 4 5 6 7"
an_integer = %x{ ./myprogram #{arguemnts} }
puts "The program returned #{an_integer}" #=> The program returned 2283
Ceci est tout fonctionne correctement, mais mon problème est que chaque rubis temps fait cet appel, le C++ programme doit recharger les données fichier (qui est plus de 100 Mo) - très lent, et très inefficace.
Comment puis-je réécrire mon programme C++ chargez le fichier une seule fois, ce qui me permet de faire de nombreuses recherches via un script ruby sans recharger le fichier à chaque fois. L'utilisation de sockets serait-elle une approche raisonnable? Écrire le programme C++ comme une extension ruby?
De toute évidence, je ne suis pas un programmeur expérimenté C++, alors merci pour votre aide.