發表文章

目前顯示的是 3月, 2007的文章

What Is APIs?

APIs(應用程式界面;application programming interfaces),

為何 ASP.NET 系統處理程序佔去太多記憶體?應該如何處理?

通常並不是很多人注意到這個問題。但是如果您發現網站為什麼速度愈來愈慢,您會不會懷疑是因為 ASP.NET 程式佔去太多記憶體,而導致系統變慢、甚至當掉的關係? 如何確定是記憶體的問題呢?您可以開啟工作管理員,在「處理程序」頁籤下,找一下 w3wp.exe (如果您使用 IIS 6.0) 或 aspnet_wp.exe (如果您使用 IIS 5.0),觀察它的記憶體使用量。如果您發現它已經佔去幾百 MB,而且還在不停的往上增加的話,那麼大致上就是記憶體的問題。 若按照正常的狀況,這個處理程序所佔用的記憶體是忽大忽小的,但總是侷限在一個合理的範圍之中。至於到底多大或多小才算合理,得視您的網站的結構和使用者的上線狀況而定。但它佔用記憶體的大小不應該無止盡的增加,否則就是異常。 有什麼方式會造成不正常的記憶體使用情況呢?首先,請注意您是不是在產生專案時使用 Debug 模式而非 Release 模式。使用 Debug 模式會造成系統的負擔,所以請在最後一次做 build 時切換到 Release 模式。同時,請把 Web.config 中的 debug="true" 和 trace enabled="true" 改掉。 其次,您是否在程式中加上了太多的字串相加(例如 "abc" & "cde" & "def"...)動作?這麼做的結果,事實上是使得記憶體中佔用了太多根本不必要的空間,也同時浪費了運算的資源。ASP.NET 提供了 StringBuilder 這個類別,請好好的運用它。 如果您尚未安裝 .Net Framework 1.1 SP1 的話,請儘快安裝。因為 SP1 所採用的記憶體區塊大小為 16M,比之前的 64M 來得有效率,造成記憶體問題的機率也變低了。 其次,檢視您的程式是否使用了許多佔用記憶體的物件,包括龐大的 DataSet 物件、Session 物件、Cache 等等。如果有的話,應該考慮採用其它的寫法。 --------------------------------------------------------------------------------

[.net]ASP.Net的HttpContext

在發開系統的過程中,有時侯會利用cookie或是session來記錄資料 例如以下… Dim cookie As New HttpCookie("cju_student") cookie.Values="A24839210" ... Response.AppendCookie(cookie) 但是有時侯有我們會把這些程式碼寫在我們的BI(Bussiness Logic 類別)裏面 這些類別並沒有繼承Page,所以我們並沒有辨法直接在類別中取得Page的refrence時… 我們就可以利用HttpContext來取得我們所需要的網頁內建物件,並針對該物件來完成或取得所需資料… 例如 Request 和 Application 以剛剛上面的例子來說,當我們把那一段取得cookie的程式碼寫在我們的BI(商用類別)時, 我們可以改成以下的寫法,一樣可以在一般類別中透過HttpContext取得或寫入cookie的值。 Public Class AppendMyCookie Public Sub AppendCookie() Dim cookie As New HttpCookie("cju_student") cookie.Values="A24839210" ... HttpContext.Current.Response.AppendCookie(cookie) End Sub End Class

[.net]避免全型的數字輸入

在vb.net的Window form畫面中 (感謝雄哥的技術支援) 在keypress事件中可以透過下面的程式只允許數字的輸入(不允許文字及其他符號) If e.KeyChar <> Microsoft.VisualBasic.ChrW(Keys.Back) Then e.Handled = Not Char.IsDigit(e.KeyChar) End If 但是如果輸入的是『全型』數字時… 上面的程式碼就沒辨法過濾掉全型的數字了 (全型的數字在其實是以文字的型態存在-->ascii碼和數字的ascii不一樣) 因些要避免全型的數字輸入時,請再加上一段程式碼 If CInt(Asc(e.KeyChar)) < 0 Then e.Handled = True 因為全型數字的ascii code值是負的兩萬多… 因此透過這個方法就可以擋掉那些全型的數字輸入。 請記得在TextBox控制項的KeyPress事件中加入以下的程式碼 就可以讓您的TextBox只允許輸入正確的數字。 If e.KeyChar <> Microsoft.VisualBasic.ChrW(Keys.Back) Then If Not Char.IsDigit(e.KeyChar) Then e.Handled = True ' 這一行只允許輸入數字的輸入 If CInt(Asc(e.KeyChar)) < 0 Then e.Handled = True ' 擋掉全型數字的輸入 End If

[.net]小數不進位,取得整數值...

在vb.net中,Option Strict Off 的情況下 將數字 9.5 強制轉型的整數(CInt(9.5))的話會變成10 因為在 Option Strict On 之下不允許將 Double 型別隱含轉換為 Integer 型別 有時侯我們只想取得整數值,不希望進位或四捨五入運算時… MyNumber = CInt(99.8) ' Returns 100. MyNumber = CInt(-99.8) ' Returns -100. MyNumber = CInt(-99.2) ' Returns -99. 您可以先呼叫 Fix 或 Int,然後在結果使用 CInt 函式,這樣就可明確轉換為整數而不需捨入。例如: MyNumber = CInt(Fix(99.8)) ' Returns 99. MyNumber = CInt(Int(99.8)) ' Returns 99.

[asp.net]解決Server端執行javascript:window.alert();時會讓畫面暫時變空白

通當我們在ASP.NET中的Code Behide(aspx.vb)程式碼裏面要讓 網頁畫面出現一個window.alert訊息時,通常會利用 response.write(" ") 但是這樣的方法…會讓我們的畫面暫面變成空白… 原因為因為這一段程式會加在我們網頁的最前頭… 一定要等這一段執行完了之後…才會接著去parse我們原來的網頁內容… 如果我們要解決這個問題… 請在您網頁碼中…新增一個literal的window網頁控制項進來… 然後將這個literal的程式碼剪下來…copy到所有網頁碼最後面段落… 最好後面不會再執行其他script程式 以下是網頁內容 ...... ...... ...... 然後…在您Server後端的程式碼中… 執行以下的程式 Me.ltlMessage.Text = " "

[.net]判斷Null的方法

在.net裏面… 有很多的方法可以來判斷是不是null Public Function IsDBNull(ByVal Expression As Object) As Boolean 這個方法滿好用的…是很基本的method... 至於要判斷是不是nothing的話… 就要用Is Nothing來判斷了 以下是msdn的解釋 如果 Expression 的資料型別判定為 DBNull 型別, IsDBNull 會傳回 True;否則,IsDBNull 將傳回 False。 System.DBNull 值指出 Object 代表遺漏或不存在的資料。 DBNull 與 Nothing 不同,因為 Nothing 表示變數尚未初始化。 它與長度為零的字串 ("") 也不同,因為這字串有時是視為 Null 字串。

[asp.net]Server.Transfer與Response.Redirect

剛剛試了Server.Transfer與Response.Redriect這個兩個方法 參考了相關的網站資料,發現兩者不同之處再於, Response.Redriect是直接下一個HttpRequest出去, 所以他並沒有將我們來源Form的相關物件資料也一併傳出去。 相反地,Server.Transfer是將我們目前表單中的資料送到我們指定的表單 所以說,夾帶的訊息相對的也更多… 在速度上…Response.Redriect是最快的,也是最直覺的 但是在"安全性"上Server.Transfer可以將我們的資料hide起來, 但是相對的夾帶的訊息是從 到 裏面的物件… 還有Server.Transfer,只能傳送在我們Server上的所屬網頁。 文章分類: .NET小心得

[ADO.NET]SqlDataAdapter執行StorePorecdure

Dim adCourseBlock As New SqlDataAdapter Dim scmCourseBlockInsert As New SqlCommand With scmCourseBlockInsert .Connection = conn .Transaction = trans .CommandType = CommandType.StoredProcedure .CommandText = "RG_AddCourseBlockData" .Parameters.Add(New SqlParameter("@syear", SqlDbType.NChar, 3)).Value = cbObj.syear .Parameters.Add(New SqlParameter("@semester", SqlDbType.NChar, 1)).Value = cbObj.semester .Parameters.Add(New SqlParameter("@course_open_no", SqlDbType.NChar, 6)).Value = cbObj.course_open_no .Parameters.Add(New SqlParameter("@block_course_no", SqlDbType.NChar, 7)).Value = cbObj.block_course_no .Parameters.Add(New SqlParameter("@score", SqlDbType.SmallInt, 5)).Value = cbObj.score .Parameters.Add(New SqlParameter("@operator_no",

[ASP.NET]讓DataGrid有那種選到該列就變顏色的效果

如何讓DataGrid有那種選到該列就變顏色的效果呢? Step 1. 實作ItemCreated事件 Private Sub dgdBlockCourse_ItemCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles dgdBlockCourse.ItemCreated e.Item.Attributes.Add("onmouseover", "javascript:this.className='blueon'") e.Item.Attributes.Add("onmouseout", "javascript:this.className='blueoff'") e.Item.Attributes.Add("class", "White") End Sub 記得在網頁中引用或加入Css的屬性 { BACKGROUND-COLOR: #ccccff } .blueoff { BACKGROUND-COLOR: white } 如此一來就會有變色的效果了…

[ASP.NET]網頁程式性能調校

在開發的過程式發生了一個問題, 就是連資料庫的網頁開啟非常的慢,雖然只有讀取兩筆資料。 經過我們trace的結果,我們先在記錄讀取資料前後的時間點, 發現只有浪費0.001秒,所以說資料庫端是正常的。 後來我們朝向IIS和Browser的方向來看,發現IIS端入網頁的速度也是正常, 因此IIS伺服器也是正常的。 最終,我們朝向 使用者的Browser來解決,當我們清除本端暫存資料後, 一切就正常了。 智偉

[ADO.NET]關於Connection Pool 與 Connection之關係

在.net中如果我們有設定Conntion Pool機制時(Web Config中設定,預設值是True) 當我們新建立一條Connction時,系統會自動到Pool中取得一條Conntion來用… 但是如果沒有Close時(記得把SQLReader也要Close),這條Conntion會被佔住, 直到TimeOut後才release… 所以一定要Close相關的連線.... 文章分類: .NET小心得

[ASP.NET]解決Connection Pool的資料被佔住...

昨天在寫權限系統的時間,我把connection Pool的Pool Size最大開到五個, 程式一啟動時自動給三個… -->在Web.Config中設定 執行中發現…我的connection一直不夠用…,雖然每次的連線均有關閉 conn.Close() 後來找到原因了… 雖然 Dim sqlRD As SqlDataReader = sqlCmd.ExecuteReader(CommandBehavior.CloseConnection) 但是conn還是沒有被關閉…在取得完資料後,沒有將他們Close掉,造成在server端, 仍然佔住資源…(雖然我的SQL Server都已經是Share Lock了).... 所以說…一定要再檢查一次 If conn.State = ConnectionState.Open Then conn.Close() End If

[ASP.NET] 執行StorePorcedure

Public Sub CreateGroupAuthority(ByVal groupNo As String) Dim myConnection As SqlConnection = DBUtil.CreateSQLConnection() Dim myCommand As SqlCommand = New SqlCommand("sp_CreateGroupAuthority", myConnection) myCommand.CommandType = CommandType.StoredProcedure Dim parameterCustomerid As SqlParameter = New SqlParameter("@GroupNo", SqlDbType.VarChar, 4) parameterCustomerid.Value = groupNo myCommand.Parameters.Add(parameterCustomerid) myConnection.Open() myCommand.ExecuteReader(CommandBehavior.CloseConnection) End Sub 文章分類: .NET小

[ADO.NET]設定DataSet的PK與mulitPK的資料搜尋

'設定DataSet的PK Dim colPk(1) As DataColumn colPk(0) = myDataSet.Tables("authority_group_program").Columns("agp_group_no") colPk(1) = myDataSet.Tables("authority_group_program").Columns("agp_program_no") myDataSet.Tables("authority_group_program").PrimaryKey = colPk 'mulitPK的資料搜尋 Dim findProgramVals(1) As Object findProgramVals(0) = _item.Cells(0).Text.Trim findProgramVals(1) = _item.Cells(1).Text.Trim myDataRow = myDataSet.Tables("authority_group_program").Rows.Find(findProgramVals)

[ASP.NET] 執行StorePorcedure

Public Sub CreateGroupAuthority(ByVal groupNo As String) Dim myConnection As SqlConnection = DBUtil.CreateSQLConnection() Dim myCommand As SqlCommand = New SqlCommand("sp_CreateGroupAuthority", myConnection) myCommand.CommandType = CommandType.StoredProcedure Dim parameterCustomerid As SqlParameter = New SqlParameter("@GroupNo", SqlDbType.VarChar, 4) parameterCustomerid.Value = groupNo myCommand.Parameters.Add(parameterCustomerid) myConnection.Open() myCommand.ExecuteReader(CommandBehavior.CloseConnection) End Sub

[asp.net]發生-物件必須實作 IConvertible 之debug

今天在寫權限管理時發生利用SqlCommand的ExecuteNonQuery() 時發生->物件必須實作 IConvertible的錯誤… 後來發現是SqlParameter.Value的assign有疏忽... pram_desc.Value = Me.txtDesc -->錯誤的寫法 pram_desc.Value = Me.txtDesc.Text -->正確的寫法

偵測解析度進入不同網頁

2007/02/25 12:25:00 與 之間 var sheight=768; if (screen.width {location.replace("800.htm");} else{location.replace("1024.htm");} //--> EXPLAIN解釋 800.htm和1024.htm就是自動辨識解析度進入的網頁

Meta之容易讓搜尋引擎尋找到網站

2007/02/26 14:34:00 與 之間 容易讓搜尋引擎容易找到的方法 修改裡面的關鍵字和你網站的內容相關

防止按鈕重複送出內容

2007/02/26 15:29:00 我們使用一些程式例如送信.發表留言等..若程式內沒有禁止重複內容的功能,有些主機執行速度比較慢,遇到急性子的訪客可能會多按幾次送出按鈕,而造成重複發信或相同的留言內容,我們可以使用這個JS來防止這樣的情形. 與 之間 與 之間 SUBMIT EXPLAIN解釋 mail.cgi改為你的cgi程式,如formmail等等 資料夾:◕‿◕『Java Script』 (8)

windows server 2003 NLB實作

http://www.ithome.com.tw/plog/index.php?op=ViewArticle&articleId=9356&blogId=620

建立高可用度和擴充度的 Web Farm

  Duwamish Online Paul Johns and Aaron Ching Microsoft Developer Network 2000 年 12 月 摘要:本文以 Duwamish Online 所實作的負載平衡方案為例,討論如何以「網路負載平衡」 (NLB),來設定一個高可用度和擴充度的Web Farm。下面是三種負載平衡的方法:「Round Robin 網域名稱系統」 (RRDNS)、負載平衡切換、以及 Microsoft Windows 2000 NLB。 簡介 通常一家公司的 Web 應用程式都是負責相當重要的作業,如果可用性不高,很容易便超出應用程式和基礎結構的成本。因此,這些應用程式一定要好用而且可靠。而要有效達到好用而且可靠的目的,就是使用多餘的伺服器。如果您的站台上有不只一部伺服器,即使其中一部當掉了,處理要求還可以重新導向到另外一部。這樣一來,便提高了網站的可用度。 您只要加上少少幾部伺服器,就可以創造出大大好用的網站。如果您只有一部好用程度達百分之 90 的伺服器,那就表示它不能平均一天工作 24 小時。(其實大部份的伺服器都比這個可靠得多,採用這個極端的例子,只是為了說明我們所強調的重點)。這部伺服器當機的可能性是 0.1。只要多加一部一樣不可靠的伺服器,就可以把兩部伺服器同時當機的機率降到 0.1 * 0.1 或 0.01。而把其中一部伺服器可以使用的機率提高到百分之 99,或是把不能使用的時間降到每天只有 14.4 分鐘。如果有七部不太可靠的伺服器,那麼其中一部可以使用的機率至少高達百分之 99.99999。當然,好一點的硬體也會大幅提高可用度。如果您考慮採用低成本的 Microsoft® Windows® 2000 硬體時,不妨多加幾部伺服器,這樣不但可以增加可用度,而且相當划算。 額外增加 Web 伺服器也可以幫助網站從容處理更大的資料量,如果叢集設計合乎規定 (本文將會討論這一部份),那麼增加伺服器的確可以提供近乎等差比例的可用度 (也就是說,其輸送量與增加的伺服器數目成等差正比)。 圖 1 所示範的,是在額外增加 Web 伺服器的情況下,所展現的 Duwamish Online 網站效能。 如果您的瀏覽器不支援內嵌框架,請按一下這裡,在單獨的頁面檢視。 圖 1 在 Web Farm 額外增加幾部 Web 伺服器之