2010-05-21 10 views
1

Je webservice, avec la méthode:Envoi gros fichier par webservice et OOM exception

[WebMethod] 
public byte[] GetFile(string FName) 
{ 
    System.IO.FileStream fs1 = null; 
       fs1 = System.IO.File.Open(FName, FileMode.Open, FileAccess.Read); 
    byte[] b1 = new byte[fs1.Length]; 
    fs1.Read(b1, 0, (int)fs1.Length); 
    fs1.Close(); 
    return b1; 
} 

et il fonctionne avec un petit fichier comme 1Mo, mais quand il s'agit de fichier de photoshop (environ 1,5gb) Je reçois:

System.OutOfMemoryException 

sur cette ligne:

Byte[] img = new Byte[fs.Length]; 

L'idée est que j'ai application winForms qui obtenir ce fichier et l'enregistrer o n disque local.

Répondre

2

Tout dépend de l'endroit où l'exception est levée. Ce qui se passe probablement, c'est qu'un fichier de cette taille va dans le gros tas d'objets (LOH) et que la fragmentation de la mémoire cause ce problème.

http://msdn.microsoft.com/en-us/magazine/cc534993.aspx

http://blogs.msdn.com/maoni/archive/2006/04/18/large-object-heap.aspx

http://blogs.msdn.com/webtopics/archive/2009/05/22/Troubleshooting-System.OutOfMemoryExceptions-in-ASP.NET.aspx

Lien vers un SO question similaire:
How do I get .NET to garbage collect aggressively?