.NET - 高效的数据库实体集合?

时间:2010-01-15 15:46:44

标签: .net asp.net-mvc vb.net collections performance

我在3d party ORM框架中有一个Page类和一个PageCollection类。我可以根据参数(pageid,parentid,url等)填充PageCollection(SQL查询)。但我需要在ASP.NET MVC网站(站点地图,身份验证)周围多次数据,所以我选择加载所有页面1次并引用该(全局)集合。

GlobalClass.Pages //is PageCollection containing all pages

我现在已经创建了函数,这些函数根据之前提到的参数(pageid,parentid,url等)返回临时子集合或单个实体。

GlobalClass.Pages.GetByPageId(id) //returns single page entity
GlobalClass.Pages.GetByParentId(parentid) //returns subcollection
然而,该网站变得非常缓慢。

去这里的方法是什么?

  • 缓存子收藏集(GetByParent()
  • 为集合创建内部哈希查找表
  • 其他东西......

Namespace BLL
Public Class PageCollection
    Inherits CustomCollectionBase

    Public Sub New()

    End Sub


    Public Sub LoadByParent(ByVal PagParent As Integer)
        If PagParent = 0 Then
            Me.whereAdd('parent IS NULL')
        Else
            Me.whereAdd('parent = ' & PagParent.ToString())
        End If

        Me.Load(Me.data)
    End Sub

    Public Function GetBySiteMapNode(ByVal node As SiteMapNode) As BLL.Page
        Return Me.GetByUrl(node.Url)
    End Function

    Public Function GetById(ByVal id As Integer) As BLL.Page
        For Each p In Me
            If p.PagAutoKey = id Then Return p
        Next
        Return Nothing
    End Function

    Public Function GetByUrl(ByVal url As String) As BLL.Page
        For Each p In Me
            If p.Url = url Then Return p
        Next
        Return Nothing
    End Function

    Public Function GetByParent(ByVal parent As Integer) As BLL.PageCollection
        Dim pc As New PageCollection
        For Each p In Me
            If p.PagParent = parent Then pc.Add(p)
        Next
        Return pc
    End Function
End Class
End Namespace

1 个答案:

答案 0 :(得分:2)

我要做的第一件事就是确定你的网站速度慢的原因。如果我每次因为表现不佳而得到一美元而且结果却是其他的......

在整个代码中设置跟踪点,找出您花费时间的地方。您当前的方法可能没问题,但是在某些实现细节上却被挂了。只修复你知道的事情。