膨胀的会话结构:

时间:2013-01-07 16:21:36

标签: asp.net webforms

我理解结构和类类型之间的基本区别。但是,在ASP.NET WebForms应用程序中......在ASP.NET WebForms应用程序中,在Session中保存相对较大的数据结构的理想容器类型是什么?它应该是结构还是类?例如......

Public Structure SessionData     

 Public ShipVias As List(Of XXXXX999.sycdefil_sql_VW)
 Public ShipTos As List(Of XXXXX999.ABC_Web_ShipTo_VW)
 Public Dests As List(Of XXXXX999.ABC_Web_CofA_VW)
 Public Owners As List(Of XXXXX999.ABC_Web_CofA_VW)

 Public Carts As List(Of XXXXX999.ABC_Web_Cart_VW)
 Public Carriers As List(Of XXXXX999.ABC_Carrier_Accounts_VW)

 Public Countries As List(Of XXXXX999.usp_get_CountryListResult)
 Public States As List(Of XXXXX999.usp_get_StatesListResult)

 Public POItems As List(Of XXXXX999.usp_get_cart_infoResult)

 Public SearchResults As List(Of SearchResult)
 Public Addresses As List(Of AddressResult)

 Public CartItems As List(Of itemsdetail)

 Public POs As List(Of POResult)

 Public SomeCollection As Collection
 Public CmpCode As String
 Public CmpStatus As String
 Public CmpSIPCust As String
 Public CurrentSession As String
 Public AllowAccess As Boolean

 Public QuickAddItems As List(Of QuickAddItem)

End Structure

正如您可能知道的那样,XXXXX999包含一个包含sprocs,函数,视图和表的LINQTOSQL DataContext dbml。

编辑点:我刚刚意识到我可以使一个结构(C#)可以为空...在vb.net中Nullable(Of SessionData)...也问题就像这样的伎俩...... Dim sd作为SessionData? 我应该将其保留为结构还是将其转换为类?

2 个答案:

答案 0 :(得分:2)

将其转换为类。基于此MSDN link,只应在以下情况下使用结构:

  

如果是实例,请考虑定义结构而不是类   类型很小,通常是短暂的或通常嵌入   其他对象。

     

除非类型具有以下所有特征,否则不要定义结构:

     
      
  1. 它逻辑上表示单个值,类似于基本类型(整数,双精度等)。
  2.   
  3. 实例大小小于16个字节。
  4.   
  5. 这是不可改变的。
  6.   
  7. 不必频繁装箱。
  8.   

答案 1 :(得分:1)

如果你正在处理不同的值,我会使用一个字典,为每种类型的列表保存字典