2011-09-28 50 views
0

我追加字符串變量文本,在追加一行後拋出System.OutOfMemoryException? 任何人都可以解釋爲什麼它會拋出錯誤。System.OutOfMemoryException

str+="something Text" 

str+="something Text" 

,最後我把它分配給lable文本

當我指定的str它拋出異常值.....

+0

這條單線看起來很好。請提供一個*完整的*例子。把你的程序,*儘可能多地從它*中刪除,然後發佈*最小的完整*程序,重現你所看到的錯誤。 – Heinzi

+0

對不起,我不能發佈code.Posting可以爲我造成問題.......... – Vikky

+0

有沒有任何地方有無限循環的機會? – CyberDude

回答

0

也許你想串連了很多串。每次更改/ concat字符串時都會生成一個新的字符串,因爲string是不可變的類型。

嘗試使用StringBuider讓你大大串:)

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

我認爲你有兩個問題:

  1. 你可能不應該使用<asp:Label>爲你的東西這樣做。改爲嘗試<asp:Literal>,或者向我們提供更多關於使用標籤的原因以及您想要完成的內容(視覺或HTML方面的內容)。
  2. 你應該建立你的字符串System.Text.StringBuilder而不是連接它與+=。這樣可以提高性能並減少內存使用量,但由於您的異常似乎在label.Text = str;上發生,因此只需用StringBuilder代替級聯就不能解決問題。

說你有這個ASP.NET標記:

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

這個C#代碼隱藏:

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

和:

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

嘗試替換這兩種

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

另一種選擇是直接用Response.Write()寫入輸出流。不知道你想要完成的是什麼,爲什麼你有這麼大的字符串,你最終得到了OutOfMemoryException,恐怕很難幫助你。