为System.OutOfMemoryException

时间:2011-09-28 08:21:47

标签: asp.net vb.net

我附加了一个字符串变量文本,在追加一行后抛出 System.OutOfMemoryException ? 任何人都可以解释为什么会抛出错误。

 str+="something  Text"

 str+="something  Text"

最后我将其分配给lable文本

当我指定str的值时,它会抛出异常.....

2 个答案:

答案 0 :(得分:1)

我认为你有两个问题:

  1. 你可能不应该使用<asp:Label>来做你正在做的事情。请尝试使用<asp:Literal>或向我们提供有关您使用标签的确切原因以及您希望完成的内容(视觉上或HTML格式)的更多信息。
  2. 您应该使用System.Text.StringBuilder构建字符串,而不是将其与+=连接起来。这样可以提高性能并减少内存使用量,但由于您的异常似乎发生在label.Text = str;,因此只需用StringBuilder替换连接就无法解决问题。
  3. 假设你有这个ASP.NET标记:

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

    和这个C#代码隐藏:

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

    尝试用以下内容替换这两个:

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

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

    另一种选择是使用Response.Write()直接写入输出流。如果你不确切地知道你想要完成什么,以及为什么你有一个如此大的字符串,你最终会得到一个OutOfMemoryException,我很难再帮助你了,我很害怕。

答案 1 :(得分:0)

可能你正试图连接很多字符串。每次更改/连接字符串时,都会生成一个新字符串,因为string是一个不可变类型。

尝试使用StringBuider来获取你的大字符串:)

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