2008-09-28 6 views

Répondre

19

Méfiez-vous des bibliothèques COM tierces ou des bibliothèques tierces .NET qui effectuent secrètement des appels win32. C'est là que nous avons eu nos plus grands maux de tête.

1

x64 vous permettra d'adresser plus de mémoire, mais étant donné le même code, il utilisera plus de mémoire que x86.

11

De l'MSDN doco, entre autres considérations:

Dans de nombreux cas, les assemblées se dérouleront le même sur le 32 bits ou 64 bits CLR. Quelques raisons d'un programme à se comporter différemment lorsqu'il est exécuté par le 64 bits CLR comprennent:

  • Structs qui contiennent des membres qui changent de taille en fonction de la plate-forme, telles que tout type de pointeur.

  • Arithmétique de pointeur qui inclut tailles constantes.

  • Déclarations incorrectes d'appel de plate-forme ou COM qui utilisent Int32 pour les poignées au lieu de IntPtr.

  • casting IntPtr à Int32

En outre, l'emplacement des fichiers par défaut.

9

Cet article a beaucoup de bonnes questions à connaître: http://osnews.com/story/20330/Windows_x64_Watch_List

Personnellement, mon patron a un ordinateur Vista 64 bits, et je programme en mode 32 bits. Nous avons rencontré les questions suivantes:

  • Registre pour applications 32 bits qui est caché (en quelque sorte) dans un dossier Wow6432Node. Toutes les applications pour lesquelles vous avez l'habitude de trouver un chemin dans le registre ne seront pas dans ce nœud (SQL Server ne le sera pas, par exemple). SysWow64 dans le dossier C: \ Windows peut provoquer des problèmes de DLL n'étant pas là où ils sont nécessaires (nous avons eu ce problème avec un composant de licence tiers). Parfois les fichiers dont vous avez besoin se trouvent dans "C: \ Program Files (x86)" plutôt que "C: \ Program Files". Suce aussi.

2
  • Lecture et écriture à 64 valeurs de bits est pas thread-safe sur une plate-forme 32 bits. La lecture d'une valeur 64 bits prend deux opérations qui pourraient être interrompues par un changement de contexte. Voir l'article MSDN sur Threading.Interlocked.Read pour plus d'informations.

  • Également entièrement d'accord avec torialanswers!:-)

0

Dans mon expérience de portage d'une L'application Asp.NET était fondamentalement sans faille. Exécuter sur machine 32 bits et sur 64 bits et aucun problème ne survient, en plus d'avoir plus de mémoire disponible. Cela arrive parce que beaucoup de problèmes déjà mentionnés (registre, threading, etc.) ont été gérés par Asp.NET et que vous devez les corriger correctement pour qu'ils s'exécutent dans l'environnement Asp.NET. Côté client (forme Windows) la même chose s'est produite mais si vous avez utilisé des API "non sécurisées" pour obtenir des dossiers spéciaux ou un accès au registre, un problème peut survenir, comme déjà indiqué.

Cordialement Massimo

Questions connexes