Allocation VB.NET 64 bits> 2 Go de RAM (bogue .NET?)

J’ai une application VB.NET 64 bits et je souhaite allouer un tampon d’une taille> 2 Go.

Dans le code suivant, le “nouveau” et le “ReDim” jettent un “OverflowException”.

Comment allouer des mémoires tampons> 2 Go lorsque ces fonctions n’acceptent que les valeurs 32 bits signées?

(Est-ce possible en C #?)

Edit – J’utilise WinXP 64 avec 4 Go de RAM.

 Dim largeur en longueur = 19005
 Hauteur dim. En tant que longueur = 32768

 Dim buffer () comme octet = nouvel octet ((largeur * hauteur * 4) - 1) {}

 Dim Dim As Long = (largeur * hauteur * 4) - 1
 ReDim buffer (taille)

Apparemment, il n’est pas possible d’allouer plus de 2 Go, même sous une application .net 64 bits s’exécutant sur un système d’exploitation 64 bits.

Je trouve cela très décevant et totalement sans tenir compte de ce que les applications et les systèmes d’exploitation 64 bits sont faits pour. J’ai affaire à des images gigantesques et j’aimerais pouvoir utiliser les octets bruts tout en RAM à la fois. Maintenant, je dois implémenter des algorithmes de pagination pour limiter les morceaux à 2 Go.

Bonjour Microsoft, comment résoudre ce problème dans la prochaine version .NET? Oui, j’ai dit réparer. C’est parce que c’est cassé. Comment vous attendez-vous à ce que les applications 64 bits décollent lorsque vous faites des choses aussi stupides ? (Pouvez-vous dire que je suis agacé ?) Merci d’avoir écouté.

Lien

http://blogs.msdn.com/joshwil/archive/2005/08/10/450202.aspx

Je pense que le UnmanagedMemoryStream fait ce dont vous avez besoin. Doc MSDN pour UnmanagedMemoryStream

Je pense que c’est une mauvaise idée d’allouer une énorme quantité de mémoire dans un environnement de récupération de place, car la plupart des éboueurs sont optimisés pour les objects de petite taille et de courte durée. Donc, utiliser de la mémoire brute est généralement une solution plus performante et plus performante pour les très gros objects.

Les travaux suivants [en théorie] (syntaxe C #):

Array.CreateInstance(typeof(int[]), 0L); 

Éditer: Créez un type avec un tableau alloué de tableaux de 1 Go alloué de taille fixe. Vous pouvez réindexer dans la propriété Item via un décalage.

Pour cela, vous devrez peut-être utiliser des fichiers mappés en mémoire, jetez un coup d’œil à la fonction MapViewOfFile .