2011-09-28 3 views
0

J'ajoute une chaîne de caractères, après l'ajout d'une ligne, System.OutOfMemoryException? Quelqu'un peut-il expliquer pourquoi il lance une erreur.System.OutOfMemoryException

str+="something Text" 

str+="something Text" 

et enfin je l'attribuer à un texte lable

Lorsque j'attribue la valeur de str il émet une exception .....

+0

Cette ligne unique semble très bien. Veuillez fournir un exemple * complet *. Prenez votre programme, * retirez-en autant que possible *, puis publiez le * plus petit programme complet * reproduisant l'erreur que vous voyez. – Heinzi

+0

désolé je ne peux pas poster le code.Posting peut créer un problème pour moi .......... – Vikky

+0

Y at-il une chance d'une boucle infinie quelque part? – CyberDude

Répondre

0

Probablement vous essayez de concaténer beaucoup de cordes . Chaque fois que vous changez/enchaînez des chaînes, une nouvelle chaîne sera produite, car la chaîne est un type immuable.

Essayez d'utiliser StringBuider pour obtenir votre grand-grande chaîne :)

var builder = new StringBuilder(); 
builder.Append("something Text"); 
builder.Append("something else"); 
builder.Append("etc."); 
builder.ToString(); 
1

Je pense que vous avez deux problèmes:

  1. Vous ne devriez probablement pas utiliser <asp:Label> pour la chose que vous êtes Faire. Essayez plutôt <asp:Literal> ou donnez-nous plus d'informations sur la raison pour laquelle vous utilisez une étiquette et ce que vous voulez accomplir (visuellement, ou en termes HTML).
  2. Vous devez construire votre chaîne avec System.Text.StringBuilder et ne pas concaténer avec +=. Cela améliorera les performances et réduira l'utilisation de la mémoire, mais comme votre exception semble se produire sur label.Text = str;, le remplacement de la concaténation par StringBuilder ne résoudra pas le problème.

Supposons que vous avez ce balisage ASP.NET:

<asp:Label id="MyLabel" runat="server" /> 

et ce C# behind:

string str = String.Empty; 
str += "Some text " 
str += "some more text"; 
MyLabel.Text = str; 

Essayez de remplacer ces deux avec:

<asp:Literal id="MyLiteral" runat="server" /> 

et

StringBuilder sb = new StringBuilder(); 
sb.Append("Some text "); 
sb.Append("some more text"); 
MyLiteral.Text = sb.ToString(); 

Une autre option consiste à écrire directement dans le flux de sortie avec Response.Write(). Sans savoir exactement ce que vous essayez d'accomplir et pourquoi vous avez une si grande chaîne que vous finissez avec un OutOfMemoryException, il est difficile de vous aider plus loin que cela, j'en ai peur.

Questions connexes