处理对象时出现StackOverflowException

jmc*_*jmc 0 c# asp.net stack-overflow dispose

我创建了一个类来将搜索值存储到会话中.这样,当我从另一个页面返回搜索页面时,我可以获得存储在会话中的值.加载搜索页面时,我从会话中获取值,填充文本字段并随后处理该对象.但是StackOverflowException当我试图处理这个物体时,我得到了一个.为什么会发生这种情况,我该如何解决?

    public class SearchValue : IDisposable{
          public int ID {get; set;}
          public string Name {get; set;}

          public void Dispose()
          {
              this.Dispose();
          }
     }

            public void SaveSearchValueToSession()
            {
                SearchValue searchValue = new SearchValue();
                searchValue.ID = Convert.ToInt32(txtID.Text);
                searchValue.Name = txtName.Text;
                Session["SEARCH_VALUE"] = searchValue;
            }

protected void Page_Load(object sender, EventArgs e){
      SearchValue searchValue = (SearchValue)Session["SEARCH_VALUE"];
      txtID.Text = searchValue.ID.ToString();
      txtName.Text = searchValue.Name;

      //Right here I would like to dispose the object
      searchValue.Dispose()
}
Run Code Online (Sandbox Code Playgroud)

Pat*_*man 5

您正在从方法内部调用相同的Dispose方法.这确实会导致StackOverflowException.我想知道你是否真的需要实施IDisposable,如果你理解它的目的......

如果你真的需要:

  1. 提供有意义的实施Dispose,免费的非托管资源等;
  2. 使用using变量;
  3. 不要将其保存在Session后处理中.

另请阅读垃圾收集基础知识.

从评论我注意到你担心创建太多的对象.别担心,这里没问题.这尤其正确,因为您的对象(单个)现在不会收集垃圾:您将其保存在会话中,直到会话被破坏为止.你一遍又一遍地重复使用同一个对象.