为什么在vb中e的平方毫米符号用exp(2)表示 而ln2用log(2)表示

shuishixingyu 日志(2) - shuishixingyu的个人空间 - 51Testing软件测试网 51Testing软件测试网-中国软件测试人的精神家园 - Powered by X-Space
------------------------------------' 从XML格式的资源文件中获取对象'------------------------------------Public Function GetResource(Byval XmlFile,byval ResourceFile)&Dim XmlObj,i,j,curRow&Dim ObjRoot,Children&Dim childCnt,Parent&Dim Layer,CurLayerIndex()&Dim sourceID,ParentID,sourceClass,sourceName&&Dim ExcelApp,Exlsheet,ExcelWorkBook&Set ExcelApp = CreateObject("Excel.Application")&ExcelApp.Visible = True&ExcelApp.DisplayAlerts = False&Set ExcelWorkBook = ExcelApp.Workbooks.Open(ResourceFile)&Set Exlsheet = ExcelApp.Sheets("对象库")&Exlsheet.Activate&&Set XmlObj = XMLUtil.CreateXMLFromFile(XmlFile) && '---当前行&curRow = 1 &'----子对象个数&childCnt = 1&&'---------获取根对象&Set bjRoot = XmlObj.GetRootElement().ChildElements().ItemByName("qtpRep:Objects")&set& Children = ObjRoot.ChildElementsByPath( "./qtpRep:Object" )&&For i = 1 to Children.count()& ' 第一层对象& Layer =& 0& ReDim Preserve CurLayerIndex(Layer)& CurLayerIndex(Layer )& = i & j = 1 & Set Child = Children.item(i)& & curRow = curRow + 1& Parent = curRow - 1& Set Children = Child.ChildElementsByPath( "./qtpRep:ChildObjects/qtpRep:Object" )& & sourceID =& curRow - 1 & Call GetAttrib(Child,sourceClass,sourceName)& ParentID = 0& Exlsheet.cells(curRow,1) = sourceID& Exlsheet.cells(curRow,2) = sourceName& Exlsheet.cells(curRow,3) = ParentID& Exlsheet.cells(curRow,4) = sourceClass& Exlsheet.cells(curRow,5) = "(" + chr(34) + sourceName + chr(34) + ")"&& If Children.count() &0& Then&& Layer = Layer + 1&& ReDim Preserve CurLayerIndex(Layer)& End If&& While Children.count() & 0&&& If& Children.count() &= j& Then&&&& CurLayerIndex(Layer )& = j &&&& Set Child = Children.item(j)&&&& &&&& curRow = curRow + 1&&&& sourceID =& curRow-1&&&& Call GetAttrib(Child,sourceClass,sourceName)&&&& ParentID = Parent&&&& Exlsheet.cells(curRow,1) = sourceID&&&& Exlsheet.cells(curRow,2) = sourceName&&&& Exlsheet.cells(curRow,3) = ParentID&&&& Exlsheet.cells(curRow,4) = sourceClass&&&& Exlsheet.cells(curRow,5) = "(" + chr(34) + sourceName + chr(34) + ")"&&&& &&&& childCnt = Child.ChildElementsByPath( "./qtpRep:ChildObjects/qtpRep:Object" ).count()& &&&& If& childCnt & 0 Then&&&&& Layer = Layer + 1&&&&& ReDim Preserve CurLayerIndex(Layer)&&&&& Set Children = Child.ChildElementsByPath( "./qtpRep:ChildObjects/qtpRep:Object" )&&&&& Parent = curRow - 1&&&&& j = 1&&&&& CurLayerIndex(Layer )& = j&&&& Else&&&&& j = j + 1&&&& End If&&& Else&&&& temprow = CurRow&&&& parent = CInt(Exlsheet.cells(parent + 1,3))&&&& &&&& Layer = Layer - 1&&&& Set Child = Child.Parent.Parent&&&& Set Children = Child.Parent.Parent.ChildElementsByPath( "./qtpRep:ChildObjects/qtpRep:Object" )&&&&&&&&&&&&&& &&&&& j = CurLayerIndex(Layer) + 1&&& End If& Wend& Set Children = Child.Parent.ChildElementsByPath( "./qtpRep:Object" )&Next&ExcelWorkBook.save&ExcelApp.Quit&Set ExcelApp = NothingEnd Function
'--------------------------------------' 获取资源对象的描述'--------------------------------------Public Function GetAttrib(byval Obj,byref attrClass,byref attrName)&Dim attrIdx&GetAttrib = ""&Set CurPara = Obj&Set attribs = CurPara.Attributes() &Set attr = attribs.Item(1) &attrClass = attr.Value() &GetAttrib = GetAttrib + attr.name() + "=" + chr(34) + attrClass + chr(34) + " "&Set attr = attribs.Item(2) &attrName = attr.Value() &GetAttrib = GetAttrib + attr.name() + "=" + chr(34) + attrName + chr(34)
End Function
Private DataFile
Private Function CasePrepare()
End Function
Public Function CaseData(byval RowNum)
End Function
Public Function CaseRun()
End Function
Public Function CaseCheck()
End Function
Public Property Get CaseID()
CaseID = "TestCase_0001"
End Property
Public Property Get CaseName()
CaseName = "
End Property
Private Sub Class_Initialize()&
DataFile = "C:\autotest\data.xls"
Call CasePrepare()
Private Sub Class_Terminate()
Case_LogInfo “
中,经常遇到页面需要输入时间,而这个时间很多时候是当前时间之后某个范围之类才有效。我们采用数据驱动时如果采用绝对时间,则数据复用性就很差了,数据需要经常修改。所以采用相对时间
下面的函数用于获取相对时间
'------------------------------------------------------------------------
'获取以当前时间为参照的偏移时间
'increTime: 偏移时间量,可使用负数 格式:day:hour:min:sec& 如 1:3:8:23
'------------------------------------------------------------------------
Public Function GetTime(byval increTime)
&&&&&& Dim y,m,d,h,n,s,timeArray
&&&&&& timeArray = split(increTime,":",-1,1)
&&&&&& d= timeArray(0)
&&&&&& h= timeArray(1)
&&&&&& n= timeArray(2)
&&&&&& s= timeArray(3)
&&&&&& GetTime = dateadd("d",d,now)
&&&&&& GetTime = dateadd("h",h,GetTime)
&&&&&& GetTime = dateadd("n",n,GetTime)
&&&&&& GetTime = dateadd("s",s,GetTime)
&&&&&& ' change to GE Time type
&&&&&& Dim dateArr,timeArr
&&&&&& timeArray = split(GetTime," ",-1,1)
&&&&&& dateArr = split(timeArray(0),"-",-1,1)
&&&&&& y = dateArr(0)
&&&&&& m = ExpandByZero("L", dateArr(1),2)
&&&&&& d = ExpandByZero("L", dateArr(2),2)
&&&&&& timeArr = split(timeArray(1),":",-1,1)
&&&&&& h = ExpandByZero("L", timeArr(0),2)
&&&&&& n = ExpandByZero("L", timeArr(1),2)
&&&&&& s = ExpandByZero("L", timeArr(2),2)
&&&&&& GetTime = y& & "-" & m & "-" & d & " " & h & ":" & n & ":" & s
End Function
'------------------------------------------------------------------------
'以0扩展当前字符串
'way: 扩展方式 L-左扩,R-右扩
'OrigStr: 原字符串
'HopeLen: 扩展后字符长度
'------------------------------------------------------------------------
Public Function ExpandByZero(byval way,byval OrigStr,byval HopeLen)
&& Dim i,ZeroStr
&& ZeroStr = ""
&& For i =1 to HopeLen - len(OrigStr)
&&&&&&&&&&&&& ZeroStr = ZeroStr & "0"
&& If way = "L" Then
&&&&&&&&&&&&& ExpandByZero = ZeroStr & OrigStr
&&&&&& elseif way = "R" Then
&&&&&&&&&&&&& ExpandByZero = OrigStr & ZeroStr
&&&&&& else
&&&&&&&&&&&&& Exit Function
End Function
StringLenMin(e_len)&&
routingname = "
Dim objStr,oScript,i
set bjStr = CreateObject("Scripting.Dictionary")
set Script. = CreateObject("Scripting.Dictionary")
for i = 1 to DataTable.GetSheet("UserData").GetParameterCount
if DataTable.GetSheet("UserData").GetParameter(i)="
&objStr.add DataTable.value(i,"UserData"),".WebEdit("opername").set "
Gen_excepData(objStr,oScript)
For i = 0 to oScript.Count-1
Call OpUserSet(1,oScript(i))
set bjStr = Nothing
set Script. = Nothing
Dim objName,scriptstr
Dim i,j,expItem
expItem = 0&&&‘
for i = 1 to DataTable.GetSheet("UserData").GetParameterCount
CorrectValue = DataTable.GetSheet("UserData").GetParameter(i).ValueByRow(1)
datatable.SetCurrentRow 2
if Instr(Datatable.value(i,"UserData"),"exp@@")&0 Then
objName = dObj.Item(Datatable.value(i,"UserData"))
arr1 = split (Datatable.value(i,"UserData"),"|",-1,1)
For j = 0 to Ubound(arr1)
exptype = Mid(arr1(j),6,InStr(arr1(j),"(")-6)
expPara = Mid(arr1(j),InStr(arr1(j),"(")+1,InStr(arr1(j),")")-InStr(arr1(j),"(")-1)
expType = replace(arr1(j),"exp@@","")
End If&&&&&&&&&&&&&&&&&&
select Case expType
Case "SpecialChar"
errorValue = Replace(CorrectValue,Right(CorrectValue,1),"%")
scriptstr = objName + chr (34) + errorValue + chr(34)
expItem = expItem + 1
oScript.add "excepData" & expItem,scriptstr
errorValue = Replace(CorrectValue,Right(CorrectValue,1),"'")
scriptstr = objName + chr (34) + errorValue + chr(34)
expItem = expItem + 1
oScript.add "excepData" & expItem,scriptstr
errorValue = Replace(CorrectValue,Right(CorrectValue,1),"/")
scriptstr = objName + chr (34) + errorValue + chr(34)
expItem = expItem + 1
oScript.add "excepData" & expItem,scriptstr
errorValue = Replace(CorrectValue,Right(CorrectValue,1),":")
scriptstr = objName + chr (34) + errorValue + chr(34)
expItem = expItem + 1
oScript.add "excepData" & expItem,scriptstr
errorValue = Replace(CorrectValue,Right(CorrectValue,1),"*")
scriptstr = objName + chr (34) + errorValue + chr(34)
expItem = expItem + 1
oScript.add "excepData" & expItem,scriptstr
errorValue = Replace(CorrectValue,Right(CorrectValue,1),"&")
scriptstr = objName + chr (34) + errorValue + chr(34)
expItem = expItem + 1
oScript.add "excepData" & expItem,scriptstr
errorValue = Replace(CorrectValue,Right(CorrectValue,1),"?")
scriptstr = objName + chr (34) + errorValue + chr(34)
expItem = expItem + 1
oScript.add "excepData" & expItem,scriptstr
errorValue = Replace(CorrectValue,Right(CorrectValue,1),"""")
scriptstr = objName + chr (34) + errorValue + chr(34)
expItem = expItem + 1
oScript.add "excepData" & expItem,scriptstr
errorValue = Replace(CorrectValue,Right(CorrectValue,1),"&")
scriptstr = objName + chr (34) + errorValue + chr(34)
expItem = expItem + 1
oScript.add "excepData" & expItem,scriptstr
errorValue = Replace(CorrectValue,Right(CorrectValue,1),"&")
scriptstr = objName + chr (34) + errorValue + chr(34)
expItem = expItem + 1
oScript.add "excepData" & expItem,scriptstr
errorValue = Replace(CorrectValue,Right(CorrectValue,1),"|")
scriptstr = objName + chr (34) + errorValue + chr(34)
expItem = expItem + 1
其实第一次看到这个问题,我没有马上反应过来,后来仔细想想, 明白了. 就是需要参数化的数据不是静态的,是动态的. 比如从数据库中选出来的.
针对这个问题,我跟Zee兄弟的看法一致,应该提前从数据源(比如数据库)把数据选取出来,然后在执行的时候直接进行参数化的选取. 反之,如果在程序执行期间,进行数据的选取,将可能带来数据库服务器的强大压力,因为参加并发执行的每个虚拟用户都去数据库搜刮一下,对数据库将是多么严峻的考验啊.
朋友或者同事之间的探讨是加深对问题理解和增加知识面,扩展视野最直接的途径和方法,加强沟通,keep in touch.
响应时间(response time)
响应时间,是指系统对用户操作的反馈时间。我们可以举一个163邮箱登录的例子:我们如何来测试邮箱的登录响应时间呢?我们首先进入网页,输入合法的用户名和密码,点击“登录”,直到登录后的邮箱界面完全显示出来为止。那么响应时间从什么时候开始计算呢?是我们输入用户名的时候,还是点击“登录”的时候?显然,我们应该从按下“登录”按钮的那一瞬间开始计时,到登录后页面完全显示出来为止,这才是真正的用户登录时间,而不包括用户输入用户名和密码的时间以及思考停顿的时间(think time)
登录响应时间其实包括3个部分:网络传输时间,服务器处理时间,浏览器显示时间即登录响应时间=网络传输时间*2+服务器处理时间+客户端显示时间网络传输是双向的,所以要乘以2。网络传输时间又可以包括接入网的传输时间和互联网中的传输时间,它的大小和你所使用的上网方式有关,比如光纤一般要比adsl要快。服务器包括web服务器和数据库服务器,服务器处理时间是我们测试的重点,也是我们能够控制的部分,因为最终用户用什么机器上网,什么接入方式上网我们是控制不了的。我们要重点测试服务器的处理速度如何,以及能否承受较大的压力,我们可以用工具(比如LoadRunner)来模拟大量用户同时登录访问服务器,来查看服务器的承载能力。客户端显示时间,如何将服务器传过来的页面尽快地显示到浏览器上,是开发人员需要考虑的问题,这里面涉及到算法优化的问题,这也是开发人员容易忽略的地方。由此可见,响应时间是可以分解成若干个时间段的,任何一个环节出问题都会影响到最终的响应时间,这就需要我们在实际工作中结合具体情况加以分析。最后再说明一点,响应时间的快慢是一个相对的概念,没有绝对的标准,比如对于163邮箱登录来说,用户可以接受的时间可以在10秒以内,而对于一个实时的军工软件来说,相应时间要精确到毫米级别甚至更低。对于普通的web网站来说,一个普遍被接受的响应时间标准是2/5/10,即用户对2秒钟以内的的响应时间非常满意,对于5秒钟以内的响应时间基本满意,对于10秒钟以上的响应时间则无法接受.
吞吐量(throughput)
吞吐量,是指单位时间内流经被测系统的数据流量,一般单位为b/s,即每秒钟流经的字节数。吞吐量是大型门户网站以及各种电子商务网站衡量自身负载能力的一个很重要的指标,一般吞吐量越大,系统单位时间内处理的数据越多,系统的负载能力也越强。吞吐量和很多因素有关,比如服务器的硬件配置,网络的拓扑结构,软件的技术架构等。实际工作中,我们往往对升级客户的硬件配置无能为力,大多数情况下,我们还是在软件的技术架构上做文章:比如后台数据库装oracle还是装sql server,显然前者的处理能力更强;web服务器是用weblogic还是iis,要看服务器端的语言是jsp还是asp…测试的时候多跟项目经理,系统架构师以及用户沟通,来获取系统架构的第一手材料。
并发(concurrency)
并发,是指多个同时发生的操作。比如有10个用户同时点击“登录”按钮(注意是同时),来登录163邮箱,我们就说此次登录163邮箱的并发数为10。需要注意的是,并发和并行不是一个概念,并发是同时发生,并行是同步运行。10个用户并发登录163邮箱,只是在点击“登录”按钮那一瞬间是并行的,而登录后各个用户的操作则不同步。
稳定性测试(reliability testing)
稳定性测试,也叫可靠性测试(reliability testing),是指连续运行被测系统,检查系统运行时的稳定程度。
我们通常用mtbf(mean time between failure,即错误发生的平均时间间隔)来衡量系统的稳定性,mtbf越大,系统的稳定性越强
稳定性测试的方法也很简单,即采用24*7(24小时*7天)的方式让系统不间断运行,至于具体运行多少天,是一周还是一个月,视项目的实际情况而定。
负载测试(load testing)
负载测试,是性能测试的一种,通常是指让被测系统在其能忍受的压力的极限范围之内连续运行,来测试系统的稳定性。可以看出负载测试和稳定性测试比较相似,都是让被测系统连续运行,区别就在于负载测试需要给被测系统施加其刚好能承受的压力,比如我们还是测试163邮箱系统的登录模块,我们先用1个用户登录,再用两个用户并发登录,再用5个,10个…在这个过程中,我们每次都需要观察并记录服务器的资源消耗情况(可以通过任务管理器中的性能监视器或者控制面板中的性能监视器),当发现服务器的资源消耗快要达到临界值时(比如cpu的利用率90%以上,内存的占有率达到80%以上),停止增加用户,假如现在的并发用户数为20,我们就用这20个用户同时多次重复登录,直到系统出现故障为止。负载测试为我们测试系统在临界状态下运行是否稳定提供了一种办法。
压力测试(stress testing)
压力测试,是性能测试的一种,通常是指持续不断的给被测系统增加压力,直到将被测系统压垮为止,用来测试系统所能承受的最大压力。比如我们不断增加并发的登录用户数,20,30,50…比如,当增加到70个用户并发登录时,系统崩溃了,我们就可以知道163邮箱所能承载的最大登录并发数为70个左右。
我们把上面的思路整理一下,编写一下163邮箱登录模块性能测试用例,供大家参考(假设163邮箱要求登录的时间最多不超过10秒,测试环境略)
关于性能测试的分类,可以举一个比较通俗的例子方便大家理解:假设一个人很轻松就能背1袋米,背2袋米很吃力,最多就能背3袋米稳定性测试–我让他背1袋米,但是让他去操场上跑圈,看多久累倒。负载测试–我让他背2袋米去操场上跑圈,看多久累倒。压力测试–我让他背2袋米,3袋米,4袋米…发现他最多就能背3袋
web 项目使用weblogic9.2做为服务器, 出现了out of memory 问题, 这时就引发了需要监控JVM内存使用情况. 本来一开始使用jprofiler ,但是只能免费10天... 10天能干什么,难道我们程序员就不过周末了??万恶的jprofiler公司. 还好JDK1.5有jconsole.
1. weblogic服务是"startWebLogic.cmd" 程序来启动的 , 要想连接到jconsole必须设置com.sun.management.jmxremote 参数.
运行-&startWebLogic.cmd -Dcom.sun.management.jmxremote
或者在快捷方式加上也可以:
2.运行-&jconsole
3.选择监控服务
4.OK,连接成功,如下图
记录一点Out Of Memory 原因:
堆是应用程序使用的主要部分,一旦堆满,应用程序就会抛出Out Of Memory错误。具体关于堆的构成以及垃圾回收算法,可以参考文档:
这个环节的优化:
1)&增加JVM内存,使得可使用的堆内存尽可能多,延长垃圾回收的时间。需要注意的是,一般来说,回收1G内存所需要的时间是7秒左右,如果这个时间访问量比高,极容易导致应用停止响应,所以并非是越大内存越好。通过增加XX:+PrintGCDetails参数可以观察到垃圾回收的频率和时间
2)&调整垃圾回收策略,加快JVM的回收,因为Web应用响应高,很多都是无用内存,加快回收可以保证有效堆会更多,这种方式会消耗更多的CPU。
首先要搞清楚,字符串在Python内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码。
decode的作用是将其他编码的字符串转换成unicode编码,如str1.decode('gb2312'),表示将gb2312编码的字符串转换成unicode编码。
encode的作用是将unicode编码转换成其他编码的字符串,如str2.encode('gb2312'),表示将unicode编码的字符串转换成gb2312编码。
在某些IDE中,字符串的输出总是出现乱码,甚至错误,其实是由于IDE的结果输出控制台自身不能显示字符串的编码,而不是程序本身的问题。
如在UliPad中运行如下代码:
s=u"中文"print s
会提示:UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)。这是因为UliPad在英文WindowsXP上的控制台信息输出窗口是按照ascii编码输出的(英文系统的默认编码是ascii),而上面代码中的字符串是Unicode编码的,所以输出时产生了错误。
将最后一句改为:print s.encode('gb2312')
则能正确输出“中文”两个字。
若最后一句改为:print s.encode('utf8')
则输出:\xe4\xb8\xad\xe6\x96\x87,这是控制台信息输出窗口按照ascii编码输出utf8编码的字符串的结果。
Updated at:
另外,代码中字符串的默认编码与代码文件本身的编码一致,如:
如果是在utf8的文件中,该字符串就是utf8编码,如果是在gb2312的文件中,则其编码为gb2312。 这种情况下,要进行编码转换,都需要先用decode方法将其转换成unicode编码,再使用encode方法将其转换成其他编码。通常,在没有指定特定的编码方式时,都是使用的系统默认编码创建的代码文件,在中可以看到如何获得系统的默认编码。
如果字符串是这样定义:
则该字符串的编码就被指定为unicode了,即python的内部编码,而与代码文件本身的编码无关。因此,对于这种情况做编码转换,只需要直接使用encode方法将其转换成指定编码即可。
如果一个字符串已经是unicode了,再进行解码则将出错,因此通常要对其编码方式是否为unicode进行判断:
isinstance(s, unicode)& #用来判断是否为unicode
QuickTest Professional 9.x 增加了一项新功能DotNetFactory,它能让你创建.NET对象实例,它封装了CreateInstance方法。如果你想使用一个.NET对象作为QuickTest中一个方法的一个参数,你必须使用CreateInstance方法首先为该.NET对象创建一个COM接口:
Set var_CreateInstance = DotNetFactory.CreateInstance (TypeName [,Assembly] [,args])
Description
The full name of the object type, for example, System.Windows.Forms.Form.
Optional. If the assembly is preloaded in the registry, you do not need to enter it. Otherwise, you should enter the full path name, for example, System.Windows.Forms. If you want to create an instance of a type in the GAC (Global Assembly Cache), you can enter the short name, for example, Forms.
Note: If you do not pass this argument, QuickTest assumes that the assembly is resident in memory. If QuickTest does not find the assembly, an error message is displayed during the run session.
Optional. The required arguments, if any, for the specified TypeName and/or Assembly.
支持DotNetFactory这项功能的DLL位于: 。
Set objBtn1 = DotNetFactory.CreateInstance(”System.Windows.Forms.Button”, “System.Windows.Forms”)
Set myList = DotnetFactory.CreateInstance("System.Collections.ArrayList")
Set File = DotNetFactory.CreateInstance("System.IO.File")
Set p1 = DotNetFactory.CreateInstance(”System.Drawing.Point”,”System.Drawing”,x,y)
Set objReader1 = DotNetFactory.CreateInstance(”System.Xml.XmlTextReader”, “System.Xml”,”C:\Documents and Settings\kmohankumar\Desktop\11.xml”)
[Description("Enables you to create an instance of a .NET object, and access its methods and properties."), Guid(<FONT color=#2-4a17-95C7-24C545CA8F53"), ClassInterface(ClassInterfaceType.None), ProgId("Mercury.DotNetFactory.1"), ComVisible(true)]
public class DotNetFactory : IObjFactory, IReflect, IObjFactoryServices
private ArrayList _ArgList;
// Methods
static DotNetFactory()&& &{
&& &Trace.WriteLine("ObjectFactory");
&& &RegistryKey currentUser = Registry.CurrentU
&& &RegistryKey key2 = .OpenSubKey(@"Software\Mercury Interactive\QuickTest Professional\MicTest\ReservedObjects\DotNetFactory");//见下图string str = (string) .GetValue("PreloadAssemblies", null);
&& &if ( != null)
&& &&& &string[] strArray = .Split(new char[] { ';' });
&& &&& &DotNetFactory factory = new DotNetFactory();
&& &&& &.Close();
&& &&& &foreach (string str2 in )
&& &&& &&& &try
&& &&& &&& &{
&& &&& &&& &&& &Trace.WriteLine();
&& &.LoadAssembly();
&& &&& &&& &&& &Trace.WriteLine("Loaded");
&& &&& &&& &}
&& &&& &&& &catch
&& &&& &&& &{
&& &&& &&& &&& &Trace.WriteLine("Failed");
&& &&& &&& &}
public DotNetFactory();&& &{
&& && &this._ArgList = new ArrayList();
private void AddArg(object arg)
&& &&& &if ( is DispWrapper)
= ((DispWrapper) )._
&& &&& &this._ArgList.Add();
private void ClearArgs();& public object CreateInstance(string TypeName, object assembly, params object[] CtorArgs)&& &{
&& &&& &object obj3;
&& &&& &ConstructorInfo[] constructors;
&& &&& &this._ArgList.Clear();
&& &&& &if ( != null)
&& &&& &&& &foreach (object obj2 in )
&& &&& &&& &{
&& &&& &&& &&& &this.AddArg();
&& &&& &&& &}
&& &&& &if (( is string) && (((string) ).Length & <FONT color=#))
&& &&& &&& &this.LoadAssembly( as string);
&& &&& &Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies();//获取当前应用程序域加载的所有程序集
&& &&& &Type conversionType = null;
&& &&& &foreach (Assembly assembly2 in )
&& & = .GetType();//如果CreateInstance仅有一个参数无须带任何可选参数,帮助里说程序集已在内存中,如例2和例3 && &&& &&& &&& &&& &&& & if ( != null)
&& &&& &&& &{
&& &&& &&& &&& &break;
&& &&& &&& &}
&& &&& &if ( == null)
&& &&& &&& &throw new Exception("Type '" +
+ "' not found in any loaded assembly");
&& &&& &if (this._ArgList.Count == <FONT color=#)
&& & = .GetConstructors();//值来自于如果CreateInstance仅有一个参数
&& &&& &&& &if (( == null) || (.Length == <FONT color=#))
&& &&& &&& &{
&& &&& &&& &&& &if (.IsValueType)
&& &&& &&& &&& &{
&& &&& &&& &&& &&& &string str = <FONT color=#";
&& &&& &&& &&& &&& &try
&& &&& &&& &&& &&& &{
&& &&& &&& &&& &&& &&& & = Convert.ChangeType(, );
&& &&& &&& &&& &&& &}
&& &&& &&& &&& &&& &catch (InvalidCastException)
&& &&& &&& &&& &&& &{
= new DispWrapper();
&& &&& &&& &&& &&& &}
&& &&& &&& &&& &}
&& &&& &&& &&& &else
&& &&& &&& &&& &{
&& &&& & = new DispWrapper();
&& &&& &&& &&& &}
&& &&& &&& &}
&& &&& &&& &else
&& &&& &&& &{
&& & = .Assembly.();
&& &&& &&& &}
&& &&& &else
&& &&& &&& &object[] args = new object[this._ArgList.Count];
&& &&& &&& &for (int i = <FONT color=#;
& this._ArgList.C ++)
&& &&& &&& &{
&& &&& &&& &&& &[] = this._ArgList[];
&& &&& &&& &}
&& &&& &&& &this.ClearArgs();
&& &&& &&& &constructors = conversionType.GetConstructors();//值来自于如果CreateInstance仅有一个参数
&& &&& &&& &if (( == null) || (constructors.Length == <FONT color=#))
&& &&& &&& &{
&& & = new DispWrapper(conversionType);
&& &&& &&& &}
&& &&& &&& &else
&& &&& &&& &{
&& &&& &&& &&& &obj3 = conversionType.Assembly.(TypeName, false, BindingFlags.CreateInstance, null, , null, null);//此步能接受例4和例5的输入
&& &&& &&& &}
&& &&& &&& &if ( == null)
&& &&& &&& &{
&& &&& &&& &&& &throw new Exception("Cannot create instance of " + TypeName);
&& &&& &&& &}
&& &&& &if (!( is string) && !( is DispWrapper))
= new DispWrapper();
&& &&& &return ;
&& &}& public void LoadAssembly(string partialName)&& &{
&& &string str = .ToLower();
&& &if (.IndexOf(".dll") & <FONT color=#)
&& &&& &this.LoadAssemblyByPath();
&& &else if (.IndexOf(".exe") & <FONT color=#)
&& &&& &this.LoadAssemblyByPath();
&& &else if (Assembly.LoadWithPartialName() == null)
&& &&& &throw new FileNotFoundException("Cannot load Assembly " + );
private void LoadAssemblyByPath(string path)&& &{
&& &Assembly.LoadFrom();
&&& FieldInfo IReflect.GetField(string name, BindingFlags bindingAttr);&&& FieldInfo[] IReflect.GetFields(BindingFlags bindingAttr);&&& MemberInfo[] IReflect.GetMember(string name, BindingFlags bindingAttr);&&& MemberInfo[] IReflect.GetMembers(BindingFlags bindingAttr);&&& MethodInfo IReflect.GetMethod(string name, BindingFlags bindingAttr);&&& MethodInfo IReflect.GetMethod(string name, BindingFlags bindingAttr, Binder binder, Type[] types, ParameterModifier[] modifiers);&&& MethodInfo[] IReflect.GetMethods(BindingFlags bindingAttr);&&& PropertyInfo[] IReflect.GetProperties(BindingFlags bindingAttr);&&& PropertyInfo IReflect.GetProperty(string name, BindingFlags bindingAttr);&&& PropertyInfo IReflect.GetProperty(string name, BindingFlags bindingAttr, Binder binder, Type returnType, Type[] types, ParameterModifier[] modifiers);&&& object IReflect.InvokeMember(string name, BindingFlags invokeAttr, Binder binder, object target, object[] args, ParameterModifier[] modifiers, CultureInfo culture, string[] namedParameters); public object Unwrap(object wrapper); // Properties
protected virtual Type MyType { get; }
Type IReflect.UnderlyingSystemType { get; }
}&&&[ComVisible(true), ClassInterface(ClassInterfaceType.AutoDispatch)]
internal class DispWrapper : IReflect
internal Exception _exception;
internal object _object;
private Type _ObjectType;
// Methods
internal DispWrapper(object obj)
&& &this._object = ;
&& &this._ObjectType = .GetType();
internal DispWrapper(Type t)
&& &this._object = null;
&& &this._ObjectType = ;
} public FieldInfo GetField(string name, BindingFlags bindingAttr);
public FieldInfo[] GetFields(BindingFlags bindingAttr);
public MemberInfo[] GetMember(string name, BindingFlags bindingAttr);
&public MemberInfo[] GetMembers(BindingFlags bindingAttr);&public MethodInfo GetMethod(string name, BindingFlags bindingAttr);&public MethodInfo[] GetMethods(BindingFlags bindingAttr);&public PropertyInfo[] GetProperties(BindingFlags bindingAttr); &public PropertyInfo GetProperty(string name, BindingFlags bindingAttr, Binder binder, Type returnType, Type[] types, ParameterModifier[] modifiers);&public object InvokeMember(string name, BindingFlags invokeAttr, Binder binder, object target, object[] args, ParameterModifier[] modifiers, CultureInfo culture, string[] namedParameters); MethodInfo IReflect.GetMethod(string name, BindingFlags bindingAttr, Binder binder, Type[] types, ParameterModifier[] modifiers); PropertyInfo IReflect.GetProperty(string name, BindingFlags bindingAttr);& // Properties
public Type UnderlyingSystemType { get; }
&一、Step download timeout (120 seconds)
  这是一个经常会遇到的问题,解决得办法走以下步骤:
  1、 修改run time setting中的请求超时时间,增加到600s,其中有三项的参数可以一次都修改了,HTTP-request connect timeout,HTTP-request receieve timeout,Step download timeout,分别建议修改为600、600、5000;run time setting设置完了后记住还需要在control组件的option的run time setting中设置相应的参数;
  2、 办法一不能解决的情况下,解决办法如下:
  设置runt time setting中的internet protocol-preferences中的advaced区域有一个winlnet replay instead of sockets选项,选项后再回放就成功了。切记此法只对系统起作用,此法来自zee的资料。
  二、问题描述Connection reset by peer
  这个问题不多遇见,一般是由于下载的速度慢,导致超时,所以,需要调整一下超时时间。
  解决办法:Run-time setting窗口中的‘Internet Protocol’-‘Preferences’设置set advanced options(设置高级选项),重新设置一下“HTTP-request connect timeout(sec),可以稍微设大一些”;
  三、问题描述connection refused
  这个的错误的原因比较复杂,也可能很简单也可能需要查看好几个地方,解决起来不同的操作系统方式也不同;
  1、 首先检查是不是连接服务过大部分被拒绝,需要监控weblogic的连接等待情况,此时需要增加acceptBacklog,每次增加 25%来提高看是否解决,同时还需要增加连接池和调整执行线程数,(连接池数*Statement Cache Size)的值应该小于等于数据库连接数最大值;
  2、 如果方法一操作后没有变化,此时需要去查看服务器操作系统中是否对连接数做了限制,AIX下可以直接vi文件limits修改其中的连接限制数,还有 tcp连接等待时间间隔大小,wiodows类似,只不过wendows修改注册表,具体修改方法查手册,注册表中有TcpDelayTime项;
  四、问题描述open many files
  问题一般都在压力较大的时候出现,由于或者应用本身对于打开的文件数有最大值限制造成,解决办法:
  1、 修改操作系统的文件数限制,aix下面修改limits下的nofiles限制条件,增大或者设置为没有限制,尽量对涉及到的服务器都作修改;
  2、 方法一解决不了情况下再去查看应用服务器weblogic的commonEnv.sh文件,修改其中的nofiles文件max-nofiles数增大,应该就可以通过了,具体就是查找到nofiles方法,修改其中else条件的执行体,把文件打开数调大;修改前记住备份此文件,防止修改出错;
  五、问题描述has shut down the connection prematurely
  一般是在访问应用服务器时出现,大用户量和小用户量均会出现;
  来自网上的解释:
  1& 应用访问死掉
  小用户时:程序上的问题。程序上存在的问题
  2& 应用服务没有死
  应用服务参数设置问题
  例如:
  在许多客户端连接Weblogic应用服务器被拒绝,而在服务器端没有错误显示,则有可能是Weblogic中的server元素的AcceptBacklog属性值设得过低。如果连接时收到connection refused消息,说明应提高该值,每次增加25%
  Java连接池的大小设置,或JVM的设置等
  3& 数据库的连接
  在应用服务的参数可能太小了
  数据库启动的最大连接数(跟硬件的内存有关)
  以上信息有一定的参考价值,实际情况可以参考此类调试。
  如果是以上所说的小用户时:程序上的问题。程序上存在数据库的问题,那就必须采用更加专业的工具来抓取出现问题的程序,主要是程序中执行效率很低的语句,weblogic可以采用introscope定位,期间可以注意观察一下jvm的垃圾回收情况看是否正常,我在实践中并发500用户和600用户时曾出现过jvm锯齿型的变化,上升下降都很快,这应该是不太正常的;
  六、问题描述Failed to connect to server
  这个问题一般是客户端链接到服务失败,原因有两个客户端连接限制(也就是压力负载机器),一个延迟严重,解决办法:
  1、 修改负载机器的tcpdelaytime注册表键值,改小;
  2、 检查网络延迟情况,看问题出在什么环节;
  建议为了减少这种情况,办法一最好测试前就完成了,保证干净的网络环境,每个负载机器的用户数不易过大,尽量平均每台负载器的用户数,这样以上问题出现的概率就很小了。
客户端连接数据库报如下错误:
show 然后 更改系统连接数 alter system set processes=1000 scope= 下面是具体的操作步骤与说明
问题描述:客户端连接数据库报错 ORA-12516: TNS: 监听程序无法找到匹配协议栈的可用句柄
解决过程: 1。查看当前会话数、processes和sessions值,发现session数和2个参数的值已经非常逼近 SQL*Plus: Release 10.2.0.1.0 - Production on 星期一 10月 9 15:50:21 2006 Copyright (c) , Oracle. All rights reserved. SQL& conn / as sysdba 已连接。 SQL& select count(*) from v$ COUNT(*) ---------- 45 SQL& show parameter processes NAME TYPE VALUE ------------------------------------ ----------- ---------------------- aq_tm_processes integer 0 db_writer_processes integer 1 gcs_server_processes integer 0 job_queue_processes integer 10 log_archive_max_processes integer 2 processes integer 50 SQL& show parameter sessions NAME TYPE VALUE ------------------------------------ ----------- ---------------------- java_max_sessionspace_size integer 0 java_soft_sessionspace_limit integer 0 license_max_sessions integer 0 license_sessions_warning integer 0 logmnr_max_persistent_sessions integer 1 sessions integer 60 shared_server_sessions integer 2。修改processes和sessions值 SQL& alter system set processes=300 scope= 系统已更改。 SQL& alter system set sessions=300 scope= 系统已更改。 3。查看processes和sessions参数,但更改并未生效 SQL& show parameter processes NAME TYPE VALUE ------------------------------------ ----------- ---------------------- aq_tm_processes integer 0 db_writer_processes integer 1 gcs_server_processes integer 0 job_queue_processes integer 10 log_archive_max_processes integer 2 processes integer 50 SQL& show parameter sessions NAME TYPE VALUE ------------------------------------ ----------- ---------------------- java_max_sessionspace_size integer 0 java_soft_sessionspace_limit integer 0 license_max_sessions integer 0 license_sessions_warning integer 0 logmnr_max_persistent_sessions integer 1 sessions integer 60 shared_server_sessions integer 4。重启数据库,使更改生效 SQL& shutdown immediate SQL& startup SQL& show parameter processes NAME TYPE VALUE ------------------------------------ ----------- ---------------------- aq_tm_processes integer 0 db_writer_processes integer 1 gcs_server_processes integer 0 job_queue_processes integer 10 log_archive_max_processes integer 2 processes integer 300 SQL& show parameter sessions NAME TYPE VALUE ------------------------------------ ----------- ---------------------- java_max_sessionspace_size integer 0 java_soft_sessionspace_limit integer 0 license_max_sessions integer 0 license_sessions_warning integer 0 logmnr_max_persistent_sessions integer 1 sessions integer 335 shared_server_sessions integer 最后测试加大连接数到50,100都没报ORA-12516错误。 有的时候我们需要调整oracle数据库的最大链接数,而这个链接数的调整是在oacle下的dbs目 录下init.ora文件中调整的。 ORACLE的连接数(sessions)与其参数文件中的进程数(process)有关,它们的关系如下: sessions=(1.1*process+5) 但是我们增加process数时,往往数据库不能启动了。这因为我们还漏调了一个unix系统参数: 它是核心参数中的semmns,这是unix系统的信号量参数。每个process会占用一个信号量。semmns 调整后,需要重新启动unix操作系统,参数才能生效。不过它的大小会受制于硬件的内存或ORACLE SGA。范围可从200——2000不等。 但是,Processes的修改不仅应该调整init.ora文件中的参数,而且应该调整OS的内核 参数,象AIX,HPUX,Solaris,SCO,UNIXWare都是这样,OS的调整是需要重新启动的,而且这个参数 的设置不能简单按照多少个终端要连到这个服务器上而定, 最关键是考虑会有多少同时连上的session(在使用一些共享连接的中间件时,一般就不需要太大), 当然还要考虑一些Oracle的后台进程,还有一些系统维护工作需要多一些连接等。 我的atmp大前置机器上对oracle调整的时候,其使用的是unixware操作系统,在做链接数调整 的时候,要先对核心参数进行调整。 核心主要相关的参数的调整如下: SHMMAX
SHMMIN 1 SHMMNI 200 SHMSEG 15 SEMMNI 1000 SEMMSL 300 SEMMNS 230 SEMOPM 20 其中semmni,semmns,semmsl要加大,至少要比processes大18 ; SEMMNI(10,1):指定在核心中信号识别的数量。这是可以在任意给定时间被激活的唯 一信号设置数量。缺省值是150。最大值由系统自动调整产生。 SEMMSL(25,300;150):指定每个信号识别中信号量的最大值。缺省值是25。 SEMMNS 除最大db外的所有db 的PROCESSES之和+2*最大db的PROCESSES+10*实例数。如3个实例进 程数分别为100、100、200,则=(100+100)+2*200+10*3=630 SEMOPM(10,20;10):指定在每个系统调用semop中能够被执行的信号操作量的最大值。 缺省值是10。 SHMMAX(4288):指定了共享内存部分大小的最大值。 等于0.5×物理内存字节数 SHMMNI(10,):指定了系统范围内共享内存标识的最大值。 SHMSEG(6,15;6):指定了与每个进程相关连的共享内存块(或标识)的数量。缺省值是6。与每 个进程相关连的共享内存块的最大值与进程拥有的未使用空间有关。因此,尽管一个进程拥有少于 SHMSEG数值的共享内存块,它也有可能因为其有限的空间而不能与其它进程相联系。 init.ora中调整为: processes = 50 # SMALL #processes = 100 # MEDIUM # processes = 200 # LARGE 其中的processes就是要调整的最大连接数的数目,我们只要调整这个参数就可以了,其它的参数可 以保持默认值。
本文来自CSDN博客,转载请标明出处:
怎样查看oracle当前的连接数呢?只需要用下面的SQL语句查询一下就可以了。
select * from v$session where username is not nullselect username,count(username) from v$session where username is not null group by username #查看不同用户的连接数
select count(*) from v$session&& #连接数Select count(*) from v$session where status='ACTIVE' #并发连接数show parameter processes&& #最大连接alter system set processes = value scope =重启数据库&& #修改连接
1。查看当前会话数、processes和sessions值,发现session数和2个参数的值已经非常逼近
SQL& conn / as sysdba已连接。
SQL& select count(*) from v$
2。修改processes和sessions值
SQL& alter system set processes=300 scope=
系统已更改。
SQL& alter system set sessions=300 scope=
系统已更改。
&&& 3。查看processes和sessions参数,但更改并未生效
4。重启数据库,使更改生效
SQL& shutdown immediate
SQL& startup
SQL& show parameter processes&&&& SQL& show parameter sessions
数据库连接池概述:& s-}q # j&&数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出。对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标。数据库连接池正是针对这个问题提出来的。& q!.l%@y K&&数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而再不是重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。&d+MD2?`Q &&数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,这些数据库连接的数量是由最小数据库连接数来设定的。无论这些数据库连接是否被使用,连接池都将一直保证至少拥有这么多的连接数量。连接池的最大数据库连接数量限定了这个连接池能占有的最大连接数,当应用程序向连接池请求的连接数超过最大连接数量时,这些请求将被加入到等待队列中。数据库连接池的最小连接数和最大连接数的设置要考虑到下列几个因素:& ./ ,bSh&&1)&最小连接数是连接池一直保持的数据库连接,所以如果应用程序对数据库连接的使用量不大,将会有大量的数据库连接资源被浪费;&%& xf j xr&&2)&最大连接数是连接池能申请的最大连接数,如果数据库连接请求超过此数,后面的数据库连接请求将被加入到等待队列中,这会影响之后的数据库操作。&[ Ylf &}/W&&3)&如果最小连接数与最大连接数相差太大,那么最先的连接请求将会获利,之后超过最小连接数量的连接请求等价于建立一个新的数据库连接。不过,这些大于最小连接数的数据库连接在使用完不会马上被释放,它将被放到连接池中等待重复使用或是空闲超时后被释放。
RegExp属性GlobalIgnoreCasePattern
RegExp方法ExecuteReplaceTest
RegExp对象MatchMatch属性&&& FirstIndex&&& Length&&& Value
RegExp集合Matches SubMatches
& 我在学习正则表达式的时候根本不知何谓正则表达式、对他的理解也非常模糊,以至于接触了很长时间才懂得,虽然vbs手册中有很详细地解释。
& 正则表达式我个人将其理解为用来搜索文本然后然后对搜索结果作处理的一些列动作。
& 先来看一段大家所熟知的ubb代码
function ubb(str)Dim rex,match,matches&& ' 建立变量。Set rex= New RegExp&& ' 建立规范表达式。rex.IgnoreCase = True&& ' 设置是否区分字母的大小写。rex.Global = True&& ' 设置全程性质。rex.Pattern = [url=(.)](.)[url]&& ' 设置模式。官方是这样解释的,我认为我们应该换一种叫法:搜索方法,这样我们才便于理解。ubb = rex.replace(str,a href=".cn/$1"$2a) '将我们搜索到的内容替换'我们在设定搜索的时候用到了两个括号,也就是说我们将只需要用到这两个括号中的内容,这两个括号中的内容在替换的时候将会用$1(第一个括号中的内容)和$2(第二个括号中的内容)来代替。end function'用法dim texttext=[url=]link[url]document.write ubb(text) '输出文本并调用正则表达式'如果在asp中使用请将document替换为response
& 上面是一个简单的正则演示,在这个演示中我们只用了一行内容,用方法replace在替换文字的时候只处理一行中的第一个ubb代码头和最后的一个ubb代码的尾,如下:[url=]link[url] [url=]link[url]将会被替换为a href=]link[url] [url=a,这个结果可不是我们要的,也就是说我们必须在大量替换搜索内容前将要搜索的全部的文本或者字符串作处理。处理的结果就是要保证每一行只能存在一个相应的代码。这点非常重要,在我学习的时候一直搞不明白为什么?后来才知道是这个原因。
& 在上面的一个示例中我们用到了正则表达使得所有属性以及replace的方法,下来我们来看一下有关于方法Execute,对象Match及所有属性,集合Matches 的一个官方的示例
Function RegExpTest(patrn, strng)Dim regEx, Match, Matches&& ' 建立变量。Set regEx = New RegExp&& ' 建立正则表达式。regEx.Pattern = patrn&& ' 设置模式。即:搜索方法regEx.IgnoreCase = True&& ' 设置是否区分大小写。regEx.Global = True&& ' 设置全程可用性。Set Matches = regEx.Execute(strng)&& ' 执行搜索。我们可以理解为被搜索的字符串For Each Match in Matches&& ' 遍历 Matches 集合。& RetStr = RetStr & 匹配 & Match' 注意,在官方提供的示例中这里是错误的,这里是被匹配的名称& RetStr = RetStr & 位于 & Match.FirstIndex & 。'这里是匹配内容的第一个字符,该数字从0开始& RetStr = RetStr & 匹配的长度为& Match.Length & 个字符。 这里不用解释了吧?& RetStr = RetStr & vbCRLF '这里是换行NextRegExpTest = RetStrEnd Functiondocument.write(RegExpTest(is., IS1 is2 IS3 is4))'如果在asp中使用请将document替换为response
& 在这个示例中我们可以看到方法Execute和对象Match是使用在集合Matches中的,Match和Matches是作为变量来使用的,为了我们很容易得看懂它,我们没有必要将他们换名字。关于对象Match的属性,我在上面的示例中都做了注释了。
& 最后我们来看集合SubMatches,代码如下:(由于官方的这段代码很含糊,所以我修改了一下)
Function SubMatchTest(inpStr)Dim Re, Match, MatchesSet Re = New RegExpRe.Pattern = (w+)@(w+).(w+)Set Matches = Re.Execute(inpStr)Set Match = Matches(0) '由于这里没有使用循环,所以只能搜索一次。只匹配搜索到的第一个内容retStr = 电子邮件地址是:& & Match & vbNewline ' 这里是匹配的内容retStr = retStr & 电子邮件别名是:& & Match.SubMatches(0) '第一个括号中的内容retStr = retStr & vbNewlineretStr = retStr & 组织是:& & Match. SubMatches(1)'第二个括号中的内容SubMatchTest = retStrEnd Functiondocument.write(SubMatchTest(请写信到
。谢谢!))'如果在asp中使用请将document替换为response
& 在上面的这段代码中我们看到了对象Match和集合Matches的另外一种用法,由此可见所有的集合均可以用这种方法,就像实用数组一样。看完上面的代码有些朋友可能想到既然在属性Pattern中已经提供了$1$2.....$n这种方法,为什么还要存在集合SubMatches呢?实际上在我们使用证则表达式的时候可能搜索要匹配的内容或字符串很长,然而我们还要对搜索到匹配的字符串进行进一步的处理,而$又不能实现这个,于是便有了集合SubMatches。
& 到这里有关于VBScript的正则表达式的内容就全部说完了,上面的3个代码均可以放在<SCRIPT. Language=VBScript><SCRIPT>标签中使用也可以放在ASP中执行。

我要回帖

更多关于 平方米与平方毫米 的文章

 

随机推荐