|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
你觉得数据库怎么样?9.将SQLServer存储历程用于数据会见
在.NETFramework供应的一切数据会见办法中,基于SQLServer的数据会见是天生高功能、可缩放Web使用程序的保举选择。利用托管SQLServer供应程序时,可经由过程利用编译的存储历程而不是特别查询取得分外的功能进步。
10.制止单线程单位(STA)COM组件
默许情形下,ASP.NET不同意任何STACOM组件在页面内运转。若要运转它们,必需在.aspx文件内将ASPCompat=true属性包括在@Page指令中。如许就将实行用的线程池切换到STA线程池,并且使HttpContext和其他内置工具可用于COM工具。前者也是一种功能优化,由于它制止了将多线程单位(MTA)封送到STA线程的任何挪用。
利用STACOM组件大概年夜年夜伤害功能,应只管制止。若必需利用STACOM组件,如在任何interop计划中,则应在实行时代举行大批挪用并在每次挪用时代发送尽量多的信息。别的,当心不要在机关页面时代创立任何STACOM组件。比方上面的代码中,在页面机关时将实例化由某个线程创立的MySTAComponent,而该线程并非将运转页面的STA线程。这大概对功能有倒霉影响,由于要机关页面就必需完成MTA和STA线程之间的封送处置。
<scriptrunat=server>
DimmyCompasnewMySTAComponent()
PublicSubPage_Load()
myComp.Name="Bob"
EndSub
<script>
<html>
<%
Response.Write(myComp.SayHello)
%>
</html>
首选机制是推延工具的创立,直到今后在STA线程下实行上述代码,以下面的例子所示。
<%@PageLanguage="VB"ASPCompat="true"%>
<scriptrunat=server>
DimmyComp
PublicSubPage_Load()
myComp=newMySTAComponent()
myComp.Name="Bob"
EndSub
</script>
<html>
<%
Response.Write(myComp.SayHello)
%>
</html>
保举的做法是在必要时大概在Page_Load办法中机关任何COM组件和内部资本。
永久不要将任何STACOM组件存储在能够由机关它的线程之外的其他线程会见的共享资本里。这类资本包含像缓存和会话形态如许的资本。即便STA线程挪用STACOM组件,也只要机关此STACOM组件的线程可以实践为该挪用服务,而这请求封送处置对创立者线程的挪用。此封送处置大概发生严重的功能丧失和可伸缩性成绩。在这类情形下,请研讨一下使COM组件成为MTACOM组件的大概性,大概更好的举措是迁徙代码以使工具成为托管工具。
11.将挪用麋集型的COM组件迁徙到托管代码
.NETFramework供应了一个复杂的办法与传统的COM组件举行交互。其长处是能够在保存现有投资的同时使用新的平台。可是在某些情形下,保存旧组件的功能开支使得将组件迁徙到托管代码是值得的。每情形都是纷歧样的,决意是不是必要迁徙组件的最好办法是对Web站点运转功能丈量。倡议您研讨一下怎样将必要大批挪用以举行交互的任何COM组件迁徙到托管代码。
很多情形下不成能将新式组件迁徙到托管代码,出格是在最后迁徙Web使用程序时。在这类情形下,最年夜的功能停滞之一是将数据从非托管情况封送到托管情况。因而,在交互操纵中,请在任何一端实行尽量多的义务,然落后行一个年夜挪用而不是一系列小挪用。比方,大众言语运转库中的一切字符串都是Unicode的,以是应在挪用托管代码之前将组件中的一切字符串转换成Unicode格局。
别的,一处置完任何COM工具或本机资本就开释它们。如许,其他哀求就可以够利用它们,而且最年夜限制地削减了因稍后哀求渣滓接纳器开释它们所引发的功能成绩。
12.在VisualBasic.NET或JScript代码中利用初期绑定
以往,开辟职员喜好利用VisualBasic、VBScript和JScript的缘故原由之一就是它们所谓“无范例”的性子。变量不必要显式范例声明,并可以复杂地经由过程利用来创立它们。当从一个范例到另外一个范例举行分派时,转换将主动实行。不外,这类便当会年夜年夜伤害使用程序的功能。
VisualBasic如今经由过程利用OptionStrict编译器指令来撑持范例平安编程。为了向后兼容,默许情形下,ASP.NET不启用该选项。可是,为了失掉最好功能,激烈倡议在页中启用该选项。若要启用OptionStrict,请将Strict属性包含在@Page指令中,大概,关于用户控件,请将该属性包含在@Control指令中。上面的示例演示了怎样设置该属性,并举行了四个变量挪用以显现利用该属性是怎样招致编译器毛病的。
<%
DimB
DimCAsString
Thiswillcauseacompilererror.
A="Hello"
Thiswillcauseacompilererror.
B="World"
Thiswillnotcauseacompilererror.
C="!!!!!!"
Butthiswillcauseacompilererror.
C=0
%>
JScript.NET也撑持无范例编程,但它不供应强迫初期绑定的编译器指令。若产生上面任何一种情形,则变量是早期绑定的:
被显式声明为Object。
是无范例声明的类的字段。
是无显式范例声明的公用函数或办法成员,而且没法从其利用揣度出范例。
最初一个不同对照庞大,由于假如JScript.NET编译器能够依据变量的利用情形揣度出范例,它就会举行优化。鄙人面的示例中,变量A是初期绑定的,但变量B是早期绑定的。
varA;
varB;
A="Hello";
B="World";
B=0;
为了取得最好的功能,当声明JScript.NET变量时,请为其分派一个范例。比方,varA:String。c语言的编译器,几乎是所有新平台都有的。因此从这点上看,c语言的程序,比其他任何语言更加容易跨平台。 |
|