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)
您正在从方法内部调用相同的Dispose方法.这确实会导致StackOverflowException.我想知道你是否真的需要实施IDisposable,如果你理解它的目的......
如果你真的需要:
Dispose,免费的非托管资源等;using变量;Session后处理中.另请阅读垃圾收集基础知识.
从评论我注意到你担心创建太多的对象.别担心,这里没问题.这尤其正确,因为您的对象(单个)现在不会收集垃圾:您将其保存在会话中,直到会话被破坏为止.你一遍又一遍地重复使用同一个对象.
| 归档时间: |
|
| 查看次数: |
1668 次 |
| 最近记录: |