2010-09-07 7 views
0

Je dois commencer par dire que j'ai très peu d'idée sur ce sujet alors humour moi si je semble ignorant. En raison du problème d'avoir à utiliser une bibliothèque vC++ dans un programme compilé g ++, j'ai construit un système serveur-client local où le serveur est compilé dans vC++ et le client en g ++ et ils interagissent via des sockets. Il y a beaucoup de transfert de données à travers le socket (près de 2 000 000 enregistrements sur 22 champs) et c'est un goulot d'étranglement majeur qui ralentit beaucoup le processus. Y a-t-il quelque part une sorte de mémoire partagée entre les processus serveur et client pour que l'accès soit beaucoup plus rapide?mémoire partagée entre les compilateurs?

+1

AKS Bonjour, Avez-vous atteint en fait une communication de mémoire partagée entre les processus compilés par différents compilateurs? (Vous mentionnez vC++ et g ++). – tssch

Répondre

1

Si elles sont sur le même PC alors oui, la mémoire partagée est plus rapide et elle fonctionne de façon défenetly à travers différents programmes.

Si c'est sur des PC différents, oui aussi, mais ça ne va pas être plus rapide que les sockets.

+0

est sur le même pc. comment puis-je utiliser la mémoire partagée? veuillez me diriger vers des ressources – aks

+0

Jetez un coup d'oeil ici: http://www.google.de/search?q=windows+shared+memory&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:en-GB: officiel et client = firefox-a et ici: http://stackoverflow.com/questions/697664/using-shared-memory-under-windows-how-to-pass-different-data – BarsMonster

+0

recommanderiez-vous boost :: interprocess pour ma situation ? – aks

2

Je suppose que vous l'utilisez sur un système Windows? (Vous ne dites pas.) Comme c'est client-serveur local, vous avez d'autres options.

Pour la communication inter-processus de Windows de grandes quantités de données, vous devriez envisager d'utiliser des fichiers mappés en mémoire, je pense. Ceux-ci peuvent être partagés en utilisant les poignées de la mémoire clobal. Ensuite, avec les objets du noyau partagés pour la synchronisation (mutex, je dirais, ou les événements) vous pouvez contrôler l'accès pour vous assurer que c'est fait de manière sûre.

Pourvu qu'il soit toujours local, c'est probablement votre méthode la plus rapide et la plus sûre.

(je vous donne des informations API plus spécifiques, mais je pris mes livres à la maison hier dans le cadre d'un bureau éclaircir - désolé)

+1

"Gestion des fichiers mappés en mémoire" http://msdn.microsoft.com/fr-fr/library/ms810613.aspx – tenfour

Questions connexes