2009-11-19 3 views
1

Je travaille sur C#. Je reçois OutOfMemoryException tout en utilisant string.replace(dt,"") et même pour stringbuilder.replace(dt,""). Puis-je s'il vous plaît savoir comment surmonter ce problème? Ou tout autre moyen de faire de même?OutOfMemoryException lors de l'utilisation de string.replace()

+0

Pouvez-vous élaborer votre code? –

+0

merci pour la réponse ... mon problème est que j'utilise des données énormes .... donc obtenir le problème en remplaçant .... –

Répondre

1

Étant donné que vos données sont très volumineuses, vous ne devriez pas essayer de les utiliser toutes en même temps. Au lieu de lire dans les mandrins, le traiter, puis l'écrire sur le disque et passer au morceau suivant.

Voici un code (non testé):

string current = getChunk(); 
while (current.Length > 0) 
{ 
    current = current.Replace(oldValue, newValue); 
    string toSave = current.Substring(0, current.Length - oldValue.Length); 
    saveToFile(toSave); 
    current = current.Substring(current.Length - oldValue.Length) + getChunk(); 
} 

Je ne sauve pas la dernière oldValue.Length parce qu'il ya une chance qu'un remplacement pourrait être à mi-chemin dans un morceau et à mi-chemin dans un autre. NOTE: il peut y avoir un bug dans ce code, mais il est assez proche.

0

Votre chaîne est probablement trop grande et le gestionnaire de mémoire ne parvient pas à trouver un bloc de mémoire contigu pour la nouvelle chaîne.

Vous aurez besoin d'optimiser votre programme pour une gestion plus efficace de la mémoire.

+0

merci pour la réponse .... oui la chaîne que j'utilise pour remplacer eu des données énormes ..... Peux-tu me suggérer un autre moyen de faire de même –

+0

Un bloc de mémoire contigu ne devrait pas être réalloué pour StringBuilder car le remplacement n'augmente pas la longueur de la chaîne d'origine. Vérifiez le lien http://stackoverflow.com/questions/287842/is-stringbuilder-replace-more-efficient-than-string-replace pour plus d'informations –

+0

Traitez la chaîne à l'intérieur d'une boucle en plus petits morceaux. – arul

Questions connexes