2012-01-23 2 views
0

J'appelle une fonction d'un serveur Web VB.NET à une DLL non managée écrite personnalisée. Si nous appelons cette DLL via un service Web sur un serveur multicœur, nous rencontrons des problèmes et cela se bloque toujours.Force une affinité de processeur spécifique sur un appel DLL non géré à partir de VB.NET

Si je redémarre le serveur et n'utilise qu'un seul cœur, il fonctionne toujours correctement et ne se bloque jamais.

Je sais que l'appel DLL est responsable de l'incident car j'ai sorti le code de débogage juste avant et après l'appel DLL.

Je peux forcer l'affinité de processeur du code .NET à 1 noyau, mais cela ne s'applique pas à la DLL non managée.

Comment puis-je forcer la DLL non managée à fonctionner uniquement sur un seul noyau car je suis sûr que cela va résoudre le problème?

Répondre

0

Si vous avez accès au code de DLL, vous pouvez utiliser quelque chose comme les lignes suivantes dans DllMain:

DWORD_PTR processAffinityMask = 0x1;

SetProcessAffinityMask(GetCurrentProcess(), processAffinityMask);

Cela définir l'affinité du processus de la dll à la première CPU.

+0

Merci boto, j'apprécie vraiment la réponse rapide. Malheureusement, nous n'avons pas le code source. C'est une vieille fortran dll d'il y a environ 10 ans mais c'est toujours essentiel. –

Questions connexes