資料庫連線我並沒有關閉耶,
因為我不想每個函數都要重設一次資料庫連線,
所以用成全城變數一直使用,
Public Class tteachin
Inherits System.Web.UI.Page
Dim conn As New SqlConnection(AppSettings("sqlconn"))
Dim command As New SqlCommand("", conn)
Dim dataadapter As New SqlDataAdapter(Command)
我只會在每次用完dataset都會清掉而己
'顯示匯入工作
Sub showjob()
Dim dt_job As New DataTable()
command.CommandText = " SELECT jobid, intime, inarea, status,
note, process_time" & _
" FROM injob" & _
" WHERE (inuser=" &
fixdbstr(Session("user"), fixkind.toNChar) & ")" & _
" AND (intable=" &
fixdbstr(viewstate("tablename"), fixkind.toNChar) & ")" & _
" ORDER BY jobid DESC"
dataadapter.Fill(dt_job)
dg_data.DataSource = dt_job
dg_data.DataBind()
dt_job.Clear() '清掉datatable
End Sub
程式中沒有用其他的dll,
只有用到一個很簡單的自己寫的控制項dll,
是用來簡化輸出javascript的
那個toExcel的程式並沒有用到excel的執行緒,
有想要用但是因為無法結束excel執行緒只好放棄
只是簡單的轉表頭處理
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
'將datagrid輸出成excel檔
Sub ToExcel(ByVal dg_data As DataGrid, ByVal file_name As String)
'使用檔案下載語法(換表頭)
Current.Response.ContentType = "application/vnd.ms-excel;
charset=utf-8"
Current.Response.AddHeader("content-disposition",
"attachment;filename=" & file_name & ".xls")
Current.Response.Write("<META http-equiv='Content-Type'
content='application/vnd.ms-excel; charset=utf-8'>") '避免亂碼
Current.Response.Write("<style>td{mso-number-format:'\@';}</style>")
'限定匯出時格式不變
'只輸出Datagrid至畫面上
Dim oStringWriter As System.IO.StringWriter = New
System.IO.StringWriter()
Dim oHtmlTextWriter As System.Web.UI.HtmlTextWriter = New
System.Web.UI.HtmlTextWriter(oStringWriter)
dg_data.RenderControl(oHtmlTextWriter)
Current.Response.Write(oStringWriter.ToString())
Current.Response.End()
End Sub
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
這樣好像還是很難看出我的程式問題在那裡,
我能否將程式寄給您,請您幫忙看看嗎?
"璉璉" 來函:
那你資料庫連線完有立刻關掉釋放嗎?
(To Excel 是用 Automation 還是...?)
Public 是建構在 dll 的話,就要看那個 dll 引用的狀況是否有該頁展示完還沒關的情形。
如果是用
<script runat=server src=xxxx></script>
則單一網頁展示完就會釋放。
於 news:E13DBCD5-6F30-4DDD-B98B-067D7527AF09%40microsoft.com 發表
我還是不太清楚,我列一下可能有問題的敘述
1.使用Module.VB檔來放置共用函數
'填入系所下拉選單
Sub FillDept(ByRef ddl_dept As DropDownList, ByVal str_time As String,
ByVal limit As Boolean, ByRef alldept As String)
END Sub
'將datagrid輸出成excel檔
Sub ToExcel(ByVal dg_data As DataGrid, ByVal file_name As String)
END Sub
2.宣告資料庫連結的全域變數
Dim conn As New SqlConnection(AppSettings("sqlconn"))
Dim command As New SqlCommand("", conn)
Dim dataadapter As New SqlDataAdapter(Command)
3.使用viewstate記錄頁面變數
viewstate("alldept")記錄所有系所的編號串連
我並沒有使用到 Shared 這個關鍵字,
也不將DataSet 放到SESSION中,
我測試時看記憶體的變化,
它增加後並不會立刻釋放耶,
一定要過一陣子才會減少,
因為畫面上很多資料都要存取資料庫,
不知是不是那些暫存資料無法立即釋放的關係,
或是我能直接將程式碼寄給您嗎,請您幫我看看是那段程式有問題
"璉璉" 來函:
Shared 是靜態變數、函數或其他宣告時期的關鍵字
Shared Function xxxx
....
End Function
這會存在 ASP.NET 內,直到所有使用者都離線超過 20 分鐘才會釋放,好處是跟其他使用者共用,但前提是不誤用。
Session 則要避免直接把 DataSet 指定進去,DataSet 是一個比較大型的物件,很多地方會使用超過預想的記憶體,再使用 Session 時,盡量以最小結構方式填入資料。
一般來說,一個網頁當一個使用者用完後,記憶體就會被釋放,除了會保持一段時間的 Session 、 Shared 這類變數。
於 news:76FCA176-556D-4E02-B965-0105D26C352A%40microsoft.com 發表
我session 並沒有放大量的資料耶,只放帳號密碼等相關資料...
Shared 及物件是指什麼呢,我不知道這是指什麼東西耶...
請舉一下例子,好嗎...
"璉璉" 來函:
盡量不要把資料庫往 session 塞,另外用完物件就釋放。
檢查一下你的 Session / Shared 這類靜態變數放了啥,特別是物件,物件記憶體吃比較多。
基本上記憶體使用應該不會增加這麼快~ 要看你怎樣設計才知道。
於 news:6407F0DE-53B7-4176-BE35-19D30615F3B3%40microsoft.com 發表
我將程式放到server上去供人使用,
但使用者說常常會無法連線使用,
進入server上看工作管理員發現,
aspnet_wp.exe的記憶體使用到1,250,874 k了
這時使用者就無法再連線了,
請問我要怎麼解決呢,
我測試過開一頁新增資料的畫面要5,000k到10,000k的記憶體
新增頁面就是做帳號檢查及填入一些下拉選單的資料,
像國藉下拉選單,部門下拉選單
為什麼會用掉那麼多的記憶體呢?
目前只是初期一百多人使用而己,
未來會有上千人同使用..我要怎麼辦呢?
--
水海科技系統研發驗證工作室 ASP.NET Web News Reader 0.2.0 UTF-8 Beta
新聞群組 RSS網誌發布測試中 http://tlcheng.no-ip.com/News/rss2.aspx
網站地圖 http://tlcheng.no-ip.com/wwwmap.htm
流域防洪/水資源運用/徐昇網/玫瑰圖/語音通訊 文章與程式
Basic/Fortran/Windows API/.Net/輔助說明檔 原始碼、文章與討論
--
ASPNET News http://tlcheng.no-ip.com/News/ | http://tlcheng.twbbs.org/News/
RSS 2.0 http://tlcheng.no-ip.com/News/rss2.aspx?Action=List&Newsgroup=microsoft.public.tw.dotnet.framework.aspnet