sample的外文翻译.docx
- 文档编号:10597615
- 上传时间:2023-02-21
- 格式:DOCX
- 页数:27
- 大小:59.34KB
sample的外文翻译.docx
《sample的外文翻译.docx》由会员分享,可在线阅读,更多相关《sample的外文翻译.docx(27页珍藏版)》请在冰豆网上搜索。
sample的外文翻译
本科生毕业设计(论文)外文资料译文
设计(论文)题目:
网络选课系统的设计与实现
—学生模块、教师模块的开发
学生姓名:
年级(学号):
系别:
专业:
计算机科学与技术
指导教师:
职称:
填表日期:
日
杭州师范大学钱江学院教学部制
外文资料翻译(译文不少于2000汉字)
1.所译外文资料:
ImprovingStringHandlingPerformanceinASPApplications
①作者:
JamesMusson
②书名(或论文题目):
③出版社(或刊物名称):
DeveloperServices,MicrosoftUK
④出版时间(或刊号):
March2003
⑤所译页码:
2.译成中文:
提高字符串处理性能的ASP应用程序
摘要:
大多数的动态服务器主页(ASP)的应用软件依赖于字串串连建立的HTML格式数据,然后呈现给用户。
本文通过用几种方法来创建此HTML数据流来进行比较,在某种特定的情况下,得出哪种方法的性能是最好的。
我们假设已经有了对ASP和VB的合理正确的认识。
(11页)。
导言
开发者在写ASP网页时,其实只是在ASP提供的对象上的Web客户建立一个流的格式文本。
用户可以通过几种方式来建立这种文字流,但是用户所选的方法对网页应用程序的性能和规模化有着很大的影响。
在我帮助客户优化Web应用程序性能的许多次实践中,我发现最主要还是得利于对改变HTML流的编写方法。
在本文中我将介绍一些常用的技术和测试对一个简单的ASP网页有什么样的影响。
技术设计
许多ASP的开发者都遵循好软件工程的原则并且在可能的情况下,把代码模块化。
这种设计通常采用许多子文件的形式,在一个网页中,这些子文件具有把特定的不连续部分模型化的函数。
通过此函数的输出的字符串,通常形成HTML的表格编码,然后通过各种组合连接起来,建立一个完整的网页。
一些开发商把这个作为一个平台,进一步把HTML函数嵌入到VisualBasicCOM组件中,希望得益于已编译的这些代码所能提供的额外性能。
虽然这无疑是一个良好的设计实践,常用的建立字符串的方法,形式的这些离散HTML代码组件对网站执行和规模有很大的关系(无论实际操作是从内部的ASP子文件还是一个VisualBasicCOM组件中进行的)。
字串串连
思考以下取自一个叫WriteHTML函数(功能)的代码片段。
参数指定的数据只是一排包含需要进行格式化成一个表结构的数据字符串(假如数据从一个数据库返回)。
FunctionWriteHTML(Data)
DimnRep
FornRep=0to99
sHTML=sHTML&vbcrlf_
&"
&Data(0,nRep)&"
&Data(1,nRep)&"
&Data(2,nRep)&"
&Data(3,nRep)&"
&Data(4,nRep)&"
&Data(5,nRep)&"
Next
WriteHTML=sHTML
EndFunction
这是ASP和VisualBasic开发者创建的HTML代码典型的一种方法。
例子中的sHTML变量是返回调用代码,然后用Response.Write写到客户上。
当然,这也可以表示成相似的编码直接地植入到网页中,而不用间接地使用WriteHTML函数。
此编码在实际中存在的问题是,字符串数据类型所使用的是ASP和VisualBasic,所以BSTR不能真正改变长度。
这意味着,每一次改变字符串的长度就会摧毁内存中这些原字符串数据,从而创建一个新的字符串数据:
结果造成一个内存分配操作和一个取消内存分配的操作。
当然,在ASP和VisualBasic,这些都是为顾客之便,所以真正的代价并不是马上直观的体现出来。
内存的分配和取消分配需要潜在的运行时间编码去执行解除独立锁,所以代价很大。
当字符串越来越大,一块快的记忆区被连锁着分配和取消分配时,这个代价的昂贵尤为明显了。
在大量的字符串串联中情况也一样。
在单一用户环境中,也许反应不出什么严重的问题;但是在一个服务器环境下,比如在ASP应用程序中运行一个网页服务器,就有可能造成严重的性能问题和可扩展性的问题。
因此,回到上面的代码片段:
有多少字符串分配正在执行呢?
事实上,答案是16。
在这种情况下,每一个操作符&的运用,都会引起被sHTML指定的字符串摧毁和重建。
我已经提到,字符串分配非常昂贵,而且随着字符串的增长而增长。
利用这方面的知识,我们可以改进上面的代码段。
快速而简单的解决方案
有两种方式,可以减轻字串串连的影响。
首先是尽量减小被操纵的字符串的大小;第二次是尽量减少字符串分配操作的执行。
修订后的WriteHTML代码如下所示。
FunctionWriteHTML(Data)
DimnRep
FornRep=0to99
sHTML=sHTML&(vbcrlf_
&"
&Data(0,nRep)&"
&Data(1,nRep)&"
&Data(2,nRep)&"
&Data(3,nRep)&"
&Data(4,nRep)&"
&Data(5,nRep)&"
Next
WriteHTML=sHTML
EndFunction
乍看之下很难分出这段编码片段和前一个编码片段的区别。
这个只是在每一个sHTML=sHTML&之后添加了括弧号。
这实际上是减少了在改变执行先后次序时需要操作的字符串联的大小。
之前的样编码,ASP编译器将会审视等号右边,并且仅仅从左到右的评估。
这样就导致每次都重复16个串联,每次重复也包括一直在增大的sHTML。
在新版本中,我们给编码器一个暗示,在改变运算次序的同时也执行运算符号。
现在,评估不仅从左到右,而且从里到外,既括弧内优先。
这个技术使得每次重复15个一直在减小的字符串,处了一个是不断增大的,而且sHTML也是增大的。
图1显示的是优化后的方法与原来标准串联方法的内存使用率的概念图。
在某些情况下,用括弧在性能和可扩展性上有很大差别,我将在本文后面示范。
图1标准串联与加上括弧号串联的内存使用的比较
TheStringBuilder
我们已经见到解决字符串联快速而有简洁的方法,许多情况下,这可能会是最好的权衡性能和执行效果的方法。
如果我们要改进建立大字符串,不管怎样,我们都需要采取第二个选择,既减少一些字符串分配业务。
为了实现这个目的,StringBuilder是必需的。
这是一个设有一个可配置的字符串缓冲区并且管理新文本插入到该缓冲区,只有当文本长度超过字符串缓冲区的长度时,才产生字符串的充足。
微软网框架免费地提供了这种类别。
(System.Text.StringBuilder)。
这是在那种环境下进行串联操作所推荐的。
在ASP和传统的VisualBasic的世界中,我们无权使用此类别,因此我们需要建立我们自己的一个类别。
以下是一个范例是用VisualBasic6.0创建的StringBuilder类(错误处理代码为了简便已省略)。
OptionExplicit
defaultinitialsizeofbufferandgrowthfactor
PrivateConstDEF_INITIALSIZEAsLong=1000
PrivateConstDEF_GROWTHAsLong=1000
buffersizeandgrowth
Privatem_nInitialSizeAsLong
Privatem_nGrowthAsLong
bufferandbuffercounters
Privatem_sTextAsString
Privatem_nSizeAsLong
Privatem_nPosAsLong
PrivateSubClass_Initialize()
setdefaultsforsizeandgrowth
m_nInitialSize=DEF_INITIALSIZE
m_nGrowth=DEF_GROWTH
initializebuffer
InitBuffer
EndSub
settheinitialsizeandgrowthamount
PublicSubInit(ByValInitialSizeAsLong,ByValGrowthAsLong)
IfInitialSize>0Thenm_nInitialSize=InitialSize
IfGrowth>0Thenm_nGrowth=Growth
EndSub
initializethebuffer
PrivateSubInitBuffer()
m_nSize=-1
m_nPos=1
EndSub
growthebuffer
PrivateSubGrow(OptionalMinimimGrowthAsLong)
initializebufferifnecessary
Ifm_nSize=-1Then
m_nSize=m_nInitialSize
m_sText=Space$(m_nInitialSize)
Else
justgrow
DimnGrowthAsLong
nGrowth=IIf(m_nGrowth>MinimimGrowth,
m_nGrowth,MinimimGrowth)
m_nSize=m_nSize+nGrowth
m_sText=m_sText&Space$(nGrowth)
EndIf
EndSub
trimthebuffertothecurrentlyusedsize
PrivateSubShrink()
Ifm_nSize>m_nPosThen
m_nSize=m_nPos-1
m_sText=RTrim$(m_sText)
EndIf
EndSub
addasingletextstring
PrivateSubAppendInternal(ByValTextAsString)
If(m_nPos+Len(Text))>m_nSizeThenGrowLen(Text)
Mid$(m_sText,m_nPos,Len(Text))=Text
m_nPos=m_nPos+Len(Text)
EndSub
addanumberoftextstrings
PublicSubAppend(ParamArrayText())
DimnArgAsLong
FornArg=0ToUBound(Text)
AppendInternalCStr(Text(nArg))
NextnArg
EndSub
returnthecurrentstringdataandtrimthebuffer
PublicFunctionToString()AsString
Ifm_nPos>0Then
Shrink
ToString=m_sText
Else
ToString=""
EndIf
EndFunction
clearthebufferandreinit
PublicSubClear()
InitBuffer
EndSub
使用这个类别的基本原理是一个类别级的变量(m_sText)被保留,这个变相相当于一个字符串缓冲区,而这个缓冲区的大小设定是靠使用Space$功能来对其填充空格符号。
当更多的文字需要与现有的文字连接,在检查确定缓冲区有足够的空间去存放保留这些新文本时,用Mid$功能在正确的位置插入文本。
函数是返回目前存放在缓冲区的文本,同时也以文本的实际长度来修整缓冲区的实际大小。
ASP代码利用的StringBuilder就如下所示。
FunctionWriteHTML(Data)
DimoSB
DimnRep
SetoSB=Server.CreateObject("StringBuilderVB.StringBuilder")
initializethebufferwithsizeandgrowthfactor
oSB.Init15000,7500
FornRep=0to99
oSB.Append"
Data(0,nRep),"
Data(1,nRep),"
Data(2,nRep),"
Data(3,nRep),"
Data(4,nRep),"
Data(5,nRep),"
Next
WriteHTML=oSB.ToString()
SetoSB=Nothing
EndFunction
由于每一次使用StringBuilder,都要建立一个那一类的实例,所以会有一个非常明确的费用。
(而且DLL的含有类必须装在第一个的实例创造上)。
还有一个费用是用额外的办法去调用StringBuilder实例还有一个。
StringBuilder的执行情况与带括号的“&”方法相反,主要取决于一个因数,这个因数由串联数,正在兴建的串字符的大小和StringBuilder缓冲区的串字符的初始化参数的选定。
请注意,在大多数情况下,最好是能够往大去估计所需要缓冲区的空间,而不是不断的去增长。
内置的方法
ASP技术包括一个非常快速的方式建立您的HTML代码,而且还涉及到简单地使用多次调用Response.Write。
写功能使用了一个优化的处在封面下的字符串缓冲区,能提供非常好的动作性能。
经修订的WriteHTML代码如下所示:
FunctionWriteHTML(Data)
DimnRep
FornRep=0to99
Response.Write"
Response.Write(nRep+1)
Response.Write"
Response.WriteData(0,nRep)
Response.Write"
Response.WriteData(1,nRep)
Response.Write"
Response.WriteData(2,nRep)
Response.Write"
Response.WriteData(3,nRep)
Response.Write"
Response.WriteData(4,nRep)
Response.Write"
Response.WriteData(5,nRep)
Response.Write"
Next
EndFunction
虽然这很可能会为我们提供最好的性能和可扩展性,不管怎样,我们已经打破了某些包装。
因为在我们的功能函数(功能)里面有编码直接写入到Response数据流,因此,召集码已经失去了一定程度的控制。
它也变得更加困难去移动这一代码(比如移进COM组件),因为函数在Response数据流上的依赖性响应流正在被使用。
测试
上述四个方法用一个简单的ASP网页,一个单一的表格,用一串哑字符来反馈来相互针对的进行了测试。
试验进行了使用应用程序中心测试,从一个单一的客户端对一台单独服务器超过100Mb/秒的网络。
被设定使用5线程,以模拟负载的5个用户连接到网站。
每次测试包括一个20秒温暖期,然后是100秒的负荷时间,此期间会有尽可能多的要求被提出。
为了使主表环离的数字不断变化,测试会重复运行串联操作中的不同数字,和WriteHTML函数里所显示的编码片断一样。
到现在为止描述过的各种串联方法都会在测试中运行。
结果
下面是一系列图表显示各个办法在应用上生产量的结果和ASP网页的反应时间。
这个提供了一些概念,那个应用程序可以支持多少要求,用户必须等待多久去把网页下载到自己的浏览器上。
表1关键级联方法缩略语使用
MethodAbbreviation
Description
RESP
Thebuilt-inResponse.Writemethod
CAT
Thestandardconcatenation('&')method
PCAT
Theparenthesizedconcatenation('&')method
BLDR
TheStringBuildermethod
虽然这项试验是远离现实的模拟计算的工作量一个典型的ASP应用程序,很明显从表2中,即使在420次的页面不是特别大,有许多复杂的ASP网页中存在的今天,下降更高的幅度,这些数字甚至可能超过这一限额的测试范围。
表2页大小和数量串连的测试样本
No.ofiterations
No.ofconcatenations
Pagesize(bytes)
15
240
2,667
30
480
4,917
45
720
7,167
60
960
9,417
75
1,200
11,667
120
1,920
18,539
180
2,880
27,899
240
3,840
37,259
300
4,800
46,619
360
5,760
55,979
420
6,720
62,219
图2图表显示吞吐量结果
我们可以看到如图2所示,作为预期,多个Response.Write方法给了我们最好的吞吐量在整个范围内反复测试。
令人惊讶的,不过是如何迅速的标准字串串连方法(CAT)的降低,以及如何更好的括号版(PCAT)执行多达300多张图片。
在大约220迭代间接的内在的StringBuilder方法(BLDR)开始的区别的性能提升,由于字串缓冲和在什么上面这一点很可能值得投资的额外努力使用的StringBuilder在这ASP页。
图3显示响应时间的结果
图4显示响应时间结果与猫省略
图表在图3和4显示响应时间衡量的时间,第一字节以毫秒为单位。
响应时间为标准字串串连方法(CAT)的增长如此迅速,图表不重复这一方法包括:
(图4),这样的分歧其它方法也可以检查。
有趣的是注意到,多个Response.Write方法和StringBuilder方法(BLDR)给予什么看起来像一个相当线性的进展增加反复,而标准串连方法(CAT)和串连的括号法(PCAT)既增加非常迅速一旦某一阈值已经过去了。
结论
在这次讨论中我已经就如何侧重不同的字符串建筑技术可应用于内的ASP环境;但不要忘记,这适用于任何情况下,您正在创造大量的字符串在VisualBasic代码,如手动创建XML文件。
下列准则应帮助您确定哪些方法可能最适合您的情况。
∙尝试括号’&'的方法,尤其是在处理现有的代码。
这将影响很小的结构的代码,你很可能会发现,这增加了高性能的应用,例如,它超过您的目标。
∙如果可能的话,又不损害封装级别您需要使用Response.Write。
这将永远给您提供最好的性能避免不必要的内存中的字符串操作。
∙使用StringBuilder建立真正大或串连密集的字符串。
虽然您可能看不到一模一样的性能提升本文中显示的,我已经使用了这些技术在现实世界中的ASPWeb应用提供很好的改善这两个性能和可扩展性很小额外的努力。
学生签名:
2009年1月12日
指导教师审阅意见:
该生在进行外文翻译的过程中,能紧密结合原文,贯通原文,语句翻译较通顺,表达较清晰,应该说该生具备了一定的翻译外文资料的能力。
指导教师签名:
2009年1月20日
外文资料原文
摘自:
ImprovingStringHandlingPerformanceinASPApplications
JamesMusson
DeveloperServices,MicrosoftUK
March2003
Summary:
MostActiveServerPages(ASP)applicationsrelyonstringconcatenationtobuildHTML-formatteddatathatisthenpresentedtousers.ThisarticlecontainsacomparisonofseveralwaystocreatethisHTMLdatastream,someofwhichprovidebetterperformancethanothersforagivensituation.AreasonableknowledgeofASPandVisualBasicprogrammingisassumed.(11printedpages)
Contents
Introduction
ASPDesign
StringConcatenation
TheQuickandEasySolution
TheStringBuilder
TheBuilt-inMethod
Testing
Results
Conclusion
Introduction
WhenwritingASPpages,thedeveloperisreallyjustcreatingastreamofformattedtextthatiswrittentotheWebclientviatheResponseobjectprovidedbyASP.Youc
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- sample 外文 翻译