В веб-приложении с высоким трафиком SQL Server Express использует около 715-720 МБ памяти сервера.Насколько мне известно, в Express по умолчанию используется 1 ГБ используемой памяти.
Вопрос: считается ли использование 715-720 МБ (70% от лимита используемой памяти SQL Server Express) высоким использованием памяти?
Если вышеупомянутое использование памяти было сочтено высоким, я хотел бы знать, могу ли я оптимизировать приведенный ниже код и запросы для повышения производительности и избежать утечек памяти, если они существуют.
Следующая функция - это веб-служба WCF.который возвращает JSON:
Public Function HomeNews() As List(Of HomeSectionsList) Implements IService.HomeNews
Dim daQuery As SqlDataAdapter
Dim dtSections = New DataTable
Try
Using myconnection As New SqlConnection(ConnectionStrings("ConnectionString").ToString)
myconnection.Open()
MyCommand = New SqlCommand("SELECT TOP(8) * FROM containers", myconnection)
daQuery = New SqlDataAdapter(MyCommand)
daQuery.Fill(dtSections)
End Using
Dim lstHomeSections As New List(Of HomeSectionsList)()
If dtSections.Rows.Count > 0 Then
For Each mySectionRow As DataRow In dtSections.Rows
Dim lstArticles As New List(Of ArticleList)()
Using myconnection As New SqlConnection(ConnectionStrings("ConnectionString").ToString)
MyCommand = New SqlCommand("SELECT TOP (10) a.*, (SELECT image FROM TABLE_X WHERE id=1) AS ads_image, (SELECT link FROM TABLE_X WHERE id=1) AS ads_link FROM articles a WHERE a.containerid=" & mySectionRow.Item("id") & " ORDER BY a.publish_date DESC", myconnection)
lstHomeSections.Add(New HomeSectionsList With {
.id = mySectionRow.Item("id"),
.title = mySectionRow.Item("title"),
.articles = CreateArticleList(MyCommand)})
End Using
Next
End If
Return lstHomeSections
Catch ex As Exception
Dim lstHomeSections As New List(Of HomeSectionsList)()
Return lstHomeSections
End Try
End Function
Public Function CreateArticleList(myCustomSQLCommand As SqlCommand) As List(Of ArticleList)
Dim dtSelected As DataTable
Dim daQuery As SqlDataAdapter
Try
Using myconnection As New SqlConnection(ConnectionStrings("ConnectionString").ToString)
myconnection.Open()
daQuery = New SqlDataAdapter(myCustomSQLCommand)
dtSelected = New DataTable
daQuery.Fill(dtSelected)
End Using
Dim lstArticles As New List(Of ArticleList)()
If dtSelected.Rows.Count > 0 Then
For Each myArticleRow As DataRow In dtSelected.Rows
lstArticles.Add(New ArticleList() With {
.id = myArticleRow.Item("id"),
.title = myArticleRow.Item("title"),
.image = myArticleRow.Item("image"),
.ad = CreateAdsList()
})
Next
End If
Return lstArticles
Catch ex As Exception
Dim lstArticles As New List(Of ArticleList)()
Return lstArticles
End Try
End Function
Public Function CreateAdsList() As List(Of AdsList)
Dim daQuery As SqlDataAdapter
Dim lstAds As New List(Of AdsList)()
Dim dtAds = New DataTable
Try
Using myconnection As New SqlConnection(ConnectionStrings("ConnectionString").ToString)
myconnection.Open()
MyCommand = New SqlCommand("SELECT a.image, a.link FROM ads a WHERE id=1", myconnection)
daQuery = New SqlDataAdapter(MyCommand)
daQuery.Fill(dtAds)
End Using
If dtAds.Rows.Count > 0 Then
For Each myrow As DataRow In dtAds.Rows
lstAds.Add(New AdsList() With {
.image = myrow.Item("image"),
.link = myrow.Item("link")
})
Next
End If
Return lstAds
Catch ex As Exception
Return lstAds
End Try
End Function
Ниже приведен пример возвращаемого JSON:
[
{
"id": 1,
"title": "Container title",
"articles": [
{
"id": 1,
"title": "Title 1",
"ad": [
{
"image": "path-to-image/image.png",
"link": "http://example.com"
}
]
},
{
"id": 2,
"title": "Title 2",
"ad": [
{
"image": "path-to-image/image.png",
"link": "http://example.com"
}
]
},
]
}
]
- В результате этих запросов возникает утечка памяти?
- вложенные
USING
оценки приводят к любой задержке?
Как лучше оптимизировать этот фрагмент кода, зная, что каждая функция вызывает другую функцию?