国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > ASP > 正文

改進(jìn) ASP 的字符串處理性能

2024-05-04 11:03:10
字體:
供稿:網(wǎng)友

大多數(shù) Active Server Pages (ASP) 應(yīng)用程序都要通過字符串連接來創(chuàng)建呈現(xiàn)給用戶的 HTML 格式的數(shù)據(jù)。本文對(duì)幾種創(chuàng)建此 HTML 數(shù)據(jù)流的方法進(jìn)行了比較,在特定情況下,某些方法在性能方面要優(yōu)于其他方法。本文假定您已經(jīng)具備一定的 ASP 和 Visual Basic 編程方面的知識(shí)。

目錄

簡(jiǎn)介 ASP 設(shè)計(jì) 字符串連接 快捷的解決方案 StringBuilder 內(nèi)置方法 測(cè)試 結(jié)果 小結(jié)

簡(jiǎn)介

編寫 ASP 頁面時(shí),開發(fā)人員實(shí)際上是創(chuàng)建一個(gè)格式化的文本流,通過 ASP 提供的 Response 對(duì)象寫入 Web 客戶端。創(chuàng)建此文本流的方法有多種,而您選擇的方法將對(duì) Web 應(yīng)用程序的性能和可縮放性產(chǎn)生很大影響。很多次,在我?guī)椭蛻魞?yōu)化其 Web 應(yīng)用程序的性能時(shí),發(fā)現(xiàn)其中一個(gè)比較有效的方法是更改 HTML 流的創(chuàng)建方式。本文將介紹幾種常用技術(shù),并測(cè)試它們對(duì)一個(gè)簡(jiǎn)單的 ASP 頁面的性能所產(chǎn)生的影響。

ASP 設(shè)計(jì)

許多 ASP 開發(fā)人員都遵循良好的軟件工程原則,盡可能地將其代碼模塊化。這種設(shè)計(jì)通常使用一些包含文件,這些文件中包含對(duì)頁面的特定不連續(xù)部分進(jìn)行格式化生成的函數(shù)。這些函數(shù)的字符串輸出(通常是 HTML 表格代碼)可以通過各種組合創(chuàng)建一個(gè)完整的頁面。某些開發(fā)人員對(duì)此方法進(jìn)行了改進(jìn),將這些 HTML 函數(shù)移到 Visual Basic COM 組件中,希望充分利用已編譯的代碼提供的額外性能。

盡管這種設(shè)計(jì)方法很不錯(cuò),但創(chuàng)建組成這些不連續(xù) HTML 代碼組件的字符串所使用的方法將對(duì) Web 站點(diǎn)的性能和可縮放性產(chǎn)生很大的影響,無論實(shí)際的操作是在 ASP 包含文件中執(zhí)行還是在 Visual Basic COM 組件中執(zhí)行。

字符串連接

請(qǐng)看以下 WriteHTML 函數(shù)的代碼片斷。名為 Data 的參數(shù)只是一個(gè)字符串?dāng)?shù)組,其中包含一些要格式化為表格結(jié)構(gòu)的數(shù)據(jù)(例如,從數(shù)據(jù)庫返回的數(shù)據(jù))。

Function WriteHTML( Data )Dim nRepFor nRep = 0 to 99 sHTML = sHTML & vbcrlf _    & "<TR><TD>" & (nRep + 1) & "</TD><TD>" _    & Data( 0, nRep ) & "</TD><TD>" _    & Data( 1, nRep ) & "</TD><TD>" _    & Data( 2, nRep ) & "</TD><TD>" _    & Data( 3, nRep ) & "</TD><TD>" _    & Data( 4, nRep ) & "</TD><TD>" _    & Data( 5, nRep ) & "</TD></TR>"NextWriteHTML = sHTMLEnd Function

這是很多 ASP 和 Visual Basic 開發(fā)人員創(chuàng)建 HTML 代碼時(shí)常用的方法。sHTML 變量中包含的文本返回到調(diào)用代碼,然后使用 Response.Write 寫入客戶端。當(dāng)然,這還可以表示為直接嵌入不包含 WriteHTML 函數(shù)的頁面的類似代碼。此代碼的問題是,ASP 和 Visual Basic 使用的字符串?dāng)?shù)據(jù)類型(BSTR 或 Basic 字符串)實(shí)際上無法更改長度。這意味著每當(dāng)字符串長度更改時(shí),內(nèi)存中字符串的原始表示形式都將遭到破壞,而且將創(chuàng)建一個(gè)包含新字符串?dāng)?shù)據(jù)的新的表示形式:這將增加分配內(nèi)存和解除分配內(nèi)存的操作。當(dāng)然,ASP 和 Visual Basic 已為您解決了這一問題,因此實(shí)際開銷不會(huì)立即顯現(xiàn)出來。分配內(nèi)存和解除分配內(nèi)存要求基本運(yùn)行時(shí)代碼解除各個(gè)專用鎖定,因此需要大量開銷。當(dāng)字符串變得很大并且有大塊內(nèi)存要被快速連續(xù)地分配和解除分配時(shí),此問題變得尤為明顯,就像在大型字符串連接期間出現(xiàn)的情況一樣。盡管這一問題對(duì)單用戶環(huán)境的影響不大,但在服務(wù)器環(huán)境(例如,在 Web 服務(wù)器上運(yùn)行的 ASP 應(yīng)用程序)中,它將導(dǎo)致嚴(yán)重的性能和可縮放性問題。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 织金县| 安康市| 瑞金市| 定西市| 滕州市| 双江| 安康市| 商南县| 武功县| 宁城县| 涿州市| 荔浦县| 梧州市| 都匀市| 溧水县| 临猗县| 务川| 印江| 越西县| 义马市| 东宁县| 绥芬河市| 吉安市| 陕西省| 南溪县| 奉化市| 育儿| 五台县| 大田县| 中江县| 郧西县| 泰兴市| 介休市| 镇康县| 佛山市| 呼玛县| 上犹县| 建昌县| 积石山| 文山县| 中宁县|