最近一个项目中,需要在asp/asp.net调用外部exe文件,代码测试无误后,部署到server(window server 2003)上,发现速度非常慢,执行时间一般14秒左右,同样的程序在beta环
境(window server 2003)和本机(windows xp professional)上执行很快 速度是300毫秒以内,我感觉非常奇怪,尝试了很多设置,问题还是不能解决,
我想应该不是权限的问题,如果是权限问题,结果应该是要么能够执行要么不能,现在的结果能执行,但是就是非常慢。
请csdn的朋友给些建议或思路 非常感谢!
在asp/asp.net情况都是如此,下面我把code,展示给大家,请予以诊断分析!
[b]asp.net
========================================================================================================================================[/b]
/// <summary>
///
/// </summary>
/// <param name="sender"> </param>
/// <param name="e"> </param>
protected void btnCheckAndGetTag_Click(object sender, EventArgs e)
{
if ((txtRevisionId.Text.Trim().Length <= 0) ||
(txtSourceCode.Text.Trim().Length <= 0))
{
return;
}
string strResult = string.Empty;
string currenttag = GetTagByReversionIdFromSvnServer(txtSourceCode.Text.Trim(), txtRevisionId.Text.Trim());
if (!string.IsNullOrEmpty(currenttag))
{
strResult = "Current Tag=" + currenttag + " <Br/>";
bool bCheck =
CheckDeliveryTagByProjectIDAndTag(currenttag.Replace("\'", ""),
txtSourceCode.Text.Trim(), txtRevisionId.Text.Trim());
if (bCheck)
{
strResult += "根据Revision id获取的tag在project delivery中已经存在 <Br/>";
}
else
{
strResult += "根据Revision id获取的tag在project delivery中不存在 <Br/>";
}
}
else
{
strResult += "根据Revision id没有获取相应的tag <Br/>";
}
lblMessage.Text = strResult;
}
/// <summary>
///
/// </summary>
/// <param name="ReversionId"> </param>
/// <returns> </returns>
protected string GetTagByReversionIdFromSvnServer(string SourceCodePath, string ReversionId)
{
DateTime dt1 = DateTime.Now;
StringBuilder sbCommand = new StringBuilder();
sbCommand.Append(@"cd /d " + SvnExePath + System.Environment.NewLine);
sbCommand.Append(@"svn.exe log " + SourceCodePath + " -r" +
ReversionId + " --xml --username " + SvnExeUser + " --password " +
SvnExeUserPassword +
"|find \"msg\"" + System.Environment.NewLine);
sbCommand.Append(@"exit" + System.Environment.NewLine);
string result = RunSvnCommandRight(sbCommand.ToString().Trim()); // 调用的函数在下面
DateTime dt2 = DateTime.Now;
TimeSpan ts = dt2 - dt1;
string executeTime = string.Format("{0}时{1}分{2}秒{3}毫秒", ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds);
Response.Write("Execute svn.exe command time=" + executeTime);
DateTime dt3 = DateTime.Now;
string[] folders = Regex.Split(result, @"\r\n");
StringBuilder sbResult = new StringBuilder();
string strResult = string.Empty;
if (folders != null && folders.Length > 0)
{
for (int i = 0; i < folders.Length; i++)
{
if ((folders[i].IndexOf(" <msg>") >= 0) ||
(folders[i].IndexOf(" </msg>") >= 0))
{
sbResult.Append(folders[i]);
}
}
}
string strReturn = string.Empty;
strResult = sbResult.ToString();
if (!string.IsNullOrEmpty(strResult))
{
strReturn=strResult.Substring(0, strResult.Length - 6).Substring(5);
}
DateTime dt4 = DateTime.Now;
TimeSpan ts1 = dt4 - dt3;
string executeTime2 = string.Format("{0}时{1}分{2}秒{3}毫秒", ts1.Hours, ts1.Minutes, ts1.Seconds, ts1.Milliseconds);
Response.Write(" <br/>");
Response.Write("String process and return value time=" + executeTime2);
return strReturn;
}
/// <summary>
/// 运行脚本命令
/// </summary>
/// <param name="strCommand"> </param>
/// <returns> </returns>
protected string RunSvnCommandRight(string strCommand)
{
if (string.IsNullOrEmpty(strCommand))
{
return string.Empty;
}
StreamWriter sIn = null;
StreamReader sOut = null;
ProcessStartInfo psi = new ProcessStartInfo("cmd.exe");
psi.UseShellExecute = false;
psi.RedirectStandardOutput = true;
psi.RedirectStandardInput = true;
psi.RedirectStandardError = true;
psi.CreateNoWindow = true;
try
{
Process process = Process.Start(psi);
sOut = process.StandardOutput;
sIn = process.StandardInput;
sIn.WriteLine(strCommand);
process.Close();
return sOut.ReadToEnd();
}
catch (Exception e)
{
return string.Empty;
}
finally
{
if (sIn != null)
{
sIn.Close();
}
if (sOut != null)
{
sOut.Close();
}
}
return string.Empty;
}
asp
==============================================================================================================
<%
Response.Clear()
'初始化执行svn.exe命令的几个参数
dim svnExePath,SvnExeUser,SvnExeUserPassword
svnExePath="C:\Program Files\CollabNet Subversion Client"
SvnExeUser="batuser"
SvnExeUserPassword="cqf3Qfyw5J"
%>
<html>
<head>
<title>根据Revision ID和code path 获取tag </title>
</head>
<body>
<%
if(trim(request.form("btnSubmit"))="提交") then
dim strCodePath,strRevisionId
strCodePath=trim(Request.Form("txtCodePath"))
strRevisionId=trim(Request.Form("txtRevisionId"))
'检测输入
if(len(strCodePath) <=0) then
Response.Write("请输入Source code path!")
Response.End()
end if
if(len(strRevisionId) <=0) then
Response.Write("请输入Revision Id!")
Response.End()
end if
strTag=GetTagByReversionIdFromSvnServer(strCodePath,strRevisionId)
Response.write("Current tag=" & strTag & " <br/>")
end if
%>
<form id="form1" name="form1" action="checktag_dmss.asp" method="post">
<table id="table1" cellspacing="1" cellpadding="1" border="1" style="width:98%">
<tr>
<td style="width:20%;text-align:center">Revision ID: </td>
<td style="width:80%;text-align:left"> <input type="text"
id="txtRevisionId" name="txtRevisionId" size="60" maxlength="100"/>
</td>
</tr>
<tr>
<td style="width:20%;text-align:center">Source code path: </td>
<td style="width:80%;text-align:left"> <input type="text"
id="txtCodePath" name="txtCodePath" size="60" maxlength="100"/>
</td>
</tr>
<tr>
<td colspan="2">
<input type="submit" id="btnSubmit" name="btnSubmit" value="提交" style="width:90px;height:25px">
<input type="reset" id="btnReset" name="btnReset" value="重置" style="width:90px;height:25px">
</td>
</tr>
</table>
</form>
</body>
</html>
<%
Function GetTagByReversionIdFromSvnServer(SourceCodePath,ReversionId)
'检测参数
if ((isnull(SourceCodePath)=true) or (len(SourceCodePath)=0) or (isnull(ReversionId)=true) or (len(ReversionId)=0)) then
GetTagByReversionIdFromSvnServer=""
Exit Function
End if
'需要执行命令行
strCommand="svn.exe log "&SourceCodePath&"
-r"&ReversionId&" --xml --username "&SvnExeUser&"
--password "&SvnExeUserPassword&"|find" & space(1) &
chr(34) & "msg" & chr(34)
'统计开始与结束时间 统计执行花费时间
dim startDateTime,endDateTime,diffDateTime
startDateTime=now()
strResult = RunSvnExeCommand(strCommand)
endDateTime=now()
diffDateTime = DateDiff("s",startDateTime,endDateTime)
Response.Write("执行svn.exe命令花费时:" & Int(diffDateTime/3600) &
"小时" & Int(diffDateTime/60) Mod 60 & "分钟" & diffDateTime
Mod 60 & "秒 <br/>")
if ((IsNull(strResult)=true) or (len(strResult) <=0)) then
GetTagByReversionIdFromSvnServer=""
Exit Function
end if
dim arrResult,strResults,strReturn
strResults=""
arrResult=split(strResult," <br>")
for i=Lbound(arrResult) to UBound(arrResult)
if((Instr(arrResult(i)," <msg>")>0) or (Instr(arrResult(i)," </msg>")>0)) then
strResults=strResults+arrResult(i)
end if
next
if((IsNull(strResults)=false) and (len(strResults))>0) then
strReturn=Mid(strResults,6,len(strResults)-6)
end if
GetTagByReversionIdFromSvnServer=strReturn
End Function
'执行svn.exe命令的函数
Function RunSvnExeCommand(strComm)
'检测参数
if ((isnull(strComm)=true) or (len(strComm)=0)) then
RunSvnExeCommand=""
Exit Function
End if
Set objWShell = CreateObject("WScript.Shell")
Set objCmd = objWShell.Exec("cmd.exe")
objCmd.StdIn.WriteLine "cd /d " & svnExePath
objCmd.StdIn.WriteLine strComm
objCmd.StdIn.WriteLine "exit"
strPResult = objCmd.StdOut.Readall()
set objCmd = nothing
Set objWShell = nothing
RunSvnExeCommand=replace(strPResult,vbCrLf," <br>")
End Function
%>