ASP.NET 执行奇慢,需10分钟,新手请多指教!

蓝天上123456 2010-11-04 04:24:02
这个过程执行要10分钟,其实就是两个连接,先从SqlServer的rpt_gsb表中读取计算公式,然后根据计算公式到oracle数据库中计算出数据来,最后把数据再写入到SqlServer数据库的datagrid1所绑定的表中。两个循环,第一层30个,第二层也才40不到,奇怪执行速度就是慢!我是新手水平有限,请高手不吝赐教!

Sub Query_Click(ByVal sender As Object, ByVal e As EventArgs)
Dim dataR1 As OracleDataReader
Dim ds1 As DataSet
Dim cmd2 As SqlCommand
Dim cmd1 As OracleCommand
Dim str1, str3, qsrq, jzrq As String
Dim i, j, sql_exe As Integer
Dim sj(100) As Decimal

For i = 0 To 99
sj(i) = 0
Next

Msg.Text = ""
cnn1 = New SqlConnection(ConfigurationSettings.AppSettings("connection"))
Cnn = New OracleConnection(ConfigurationSettings.AppSettings("connection1"))
Try
cnn1.Open()
str1 = "update unit_report set sj01='',sj02='',sj03='',sj04='',sj05='',sj06='',sj07='',sj08='',sj09='',sj10='',sj11='',sj12='',sj13='',sj14='',sj15='',sj16='',sj17='',sj18='',sj19='',sj20='',sj21='',sj22='',sj23='',sj24='',sj25='',sj26='',sj27='',sj28='',sj29='',sj30=''"
cmd2 = New SqlCommand(str1, cnn1)
cmd2.ExecuteNonQuery()

str1 = "select * from rpt_gsb where rpt_code='" + Drop_rpt.SelectedValue + "' order by sw"
dtcmd = New SqlDataAdapter(str1, cnn1)
ds1 = New DataSet
dtcmd.Fill(ds1, "rpt_gsb")
DataGrid1.Width = ds1.Tables("rpt_gsb").Rows.Count * 52
For j = 0 To DataGrid1.Items.Count - 1
sql_exe = 0
str1 = "update unit_report set "
For i = 1 To ds1.Tables("rpt_gsb").Rows.Count
If j = 0 Then DataGrid1.Columns(i + 2).HeaderText = ds1.Tables("rpt_gsb").Rows(i - 1).Item("title").ToString()
If ds1.Tables("rpt_gsb").Rows(i - 1).Item("js_code") = 1 Then
If ds1.Tables("rpt_gsb").Rows(i - 1).Item("history") = 1 Then
qsrq = CStr(CInt(Left(tj_qsrq.Text, 4)) - 1) + Right(tj_qsrq.Text, 4)
jzrq = CStr(CInt(Left(tj_jzrq.Text, 4)) - 1) + Right(tj_jzrq.Text, 4)
If DataGrid1.Items.Item(j).Cells(3).Text = "1" Then
str3 = ds1.Tables("rpt_gsb").Rows(i - 1).Item("sql_code") + " and sta_date>='" + qsrq + "' and sta_date<='" + jzrq + "' and unit_code='" + Trim(DataGrid1.Items.Item(j).Cells(1).Text) + "'"
Else
str3 = ds1.Tables("rpt_gsb").Rows(i - 1).Item("sql_code") + " and sta_date>='" + qsrq + "' and sta_date<='" + jzrq + "'"
End If
Else
If DataGrid1.Items.Item(j).Cells(3).Text = "1" Then
str3 = ds1.Tables("rpt_gsb").Rows(i - 1).Item("sql_code") + " and sta_date>='" + tj_qsrq.Text + "' and sta_date<='" + tj_jzrq.Text + "' and unit_code='" + Trim(DataGrid1.Items.Item(j).Cells(1).Text) + "'"
Else
str3 = ds1.Tables("rpt_gsb").Rows(i - 1).Item("sql_code") + " and sta_date>='" + tj_qsrq.Text + "' and sta_date<='" + tj_jzrq.Text + "'"
End If
End If
str3 = Left(str3, str3.IndexOf("from")) + " as nums " + Mid(str3, str3.IndexOf("from") + 1, str3.Length)
cmd1 = New OracleCommand(str3, Cnn)
Try
Cnn.Open()
dataR1 = Nothing
dataR1 = cmd1.ExecuteReader(CommandBehavior.CloseConnection)
If dataR1.Read() Then
If IsDBNull(dataR1("nums")) Then
sj(i) = 0
Else
sj(i) = dataR1("nums")
End If
If sj(i) > 0 Then
sql_exe = 1
Select Case ds1.Tables("rpt_gsb").Rows(i - 1).Item("format")
Case 0
str1 = str1 + "sj" + i.ToString("00") + "='" + Format(sj(i), "0").ToString + "',"
Case 1
str1 = str1 + "sj" + i.ToString("00") + "='" + Format(sj(i), "###0.0").ToString + "',"
Case Else
str1 = str1 + "sj" + i.ToString("00") + "='" + Format(sj(i), "###0.00").ToString + "',"
End Select
End If
dataR1.Close()
End If
Finally
Cnn.Close()
End Try
Else
If ds1.Tables("rpt_gsb").Rows(i - 1).Item("js_code") = 2 Then
If sj(i - 2) = 0 And sj(i - 1) > 0 Then
sql_exe = 1
str1 = str1 + "sj" + i.ToString("00") + "='100.0',"
Else
If sj(i - 2) > 0 Then
sql_exe = 1
sj(i) = 100 * (sj(i - 1) - sj(i - 2)) / sj(i - 2)
str1 = str1 + "sj" + i.ToString("00") + "='" + Format(sj(i), "###0.0").ToString + "',"
End If
End If
End If
If ds1.Tables("rpt_gsb").Rows(i - 1).Item("js_code") = 3 Then
If sj(i - 2) > 0 Then
sql_exe = 1
sj(i) = sj(i - 1) / sj(i - 2)
str1 = str1 + "sj" + i.ToString("00") + "='" + Format(sj(i), "###0.0").ToString + "',"
End If
End If
End If
Next
If sql_exe = 1 Then
str1 = Mid(str1, 1, str1.Length - 1)
str1 = str1 + " where dwlh='" + Trim(DataGrid1.Items.Item(j).Cells(1).Text) + "'"
cmd2 = New SqlCommand(str1, cnn1)
cmd2.ExecuteNonQuery()
Else
DataGrid1.Items.Item(j).Visible = False
End If
Next
Finally
Cnn.Close()
cnn1.Close()
End Try
BindGrid()
End Sub
...全文
159 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiongjiongtang 2010-11-05
  • 打赏
  • 举报
回复
str1 = "select * from rpt_gsb where rpt_code='" + Drop_rpt.SelectedValue + "' order by sw"
干嘛 * 扫描整个表呢。。。
hailin668 2010-11-05
  • 打赏
  • 举报
回复
_LiuHui 2010-11-05
  • 打赏
  • 举报
回复
10分钟啊。好神奇啊。
gwf25sz 2010-11-05
  • 打赏
  • 举报
回复
每天一贴,可得10分~!
我是地摊小贩 2010-11-05
  • 打赏
  • 举报
回复
用dataset试试
蓝天上123456 2010-11-05
  • 打赏
  • 举报
回复
谢谢各位高手,我查看了下,我在这个数据库中,还执行了一个模块就是每3分钟从异地数据库中接收数据,这个也会影响时间,但如果没有这个的话,也要5分钟左右,这也慢。
我主要问我上述代码怎么优化?是不是用dataset的updata写数据库方式代替ExecuteNonQuery是不是会好点。
zrrsj 2010-11-05
  • 打赏
  • 举报
回复

[Quote=引用 1 楼 zeewendotnet 的回复:]
你用sql 2005 profile工具监视一下数据库语句的执行情况,再打开任务管理器,监测一下CPU是不是很高,如果高的话,看是那个进程引起的,是asp_wp还是sqlserver,如果是wp就是asp.net中的运算费资源了,如果是sqlserver进程,就是数据库耗费资源了。这样你就应该能了解到到底是哪里。如果是数据库运行的慢,看profile的跟踪是那句代码,然后再作相应的优化调整。
[/Quote]
  • 打赏
  • 举报
回复
首先要知道是哪错了, 把你的SQL语句扔到 SQL 里执行下, 看看时间. 如果SQL 就执行就很忙。 那就说明你要优化SQL了 .如果SQL快, 那就说明你页面处理有问题。 需要改进.
边城的刀声 2010-11-05
  • 打赏
  • 举报
回复
先给数据库加引索引试试,如果还慢,把页面的ViewState也关掉试试
wyman25 2010-11-05
  • 打赏
  • 举报
回复
你用sql 2005 profile工具监视一下数据库语句的执行情况,再打开任务管理器,监测一下CPU是不是很高,如果高的话,看是那个进程引起的,是asp_wp还是sqlserver,如果是wp就是asp.net中的运算费资源了,如果是sqlserver进程,就是数据库耗费资源了。这样你就应该能了解到到底是哪里。如果是数据库运行的慢,看profile的跟踪是那句代码,然后再作相应的优化调整。
蓝天上123456 2010-11-05
  • 打赏
  • 举报
回复
rpt_gsb 的记录很少,只有几条,应该不是这个原因吧。
另:我运行sql 2005 profile工具,发现audit logout,然后audit Login,是不是这个原因?
内容概要:本文针对无刷直流电机驱动的电子机械制动(EMB)执行器,建立了考虑Stribeck摩擦特性的非线性耦合动力学模型,并在Simulink环境中完成了系统级仿真分析。研究综合集成了电机动力学、齿轮传动机构与制动执行机构的动力学特性,构建了高保真的机电一体化系统模型。重点引入Stribeck摩擦模型以精确描述低速工况下执行器内部存在的静摩擦、粘滞摩擦与库仑摩擦之间的过渡行为,有效提升了系统在启停、反向运动等瞬态过程中的动态响应仿真精度。通过多工况仿真验证了模型的有效性,能够准确反映摩擦引起的爬行、滞后与定位误差等非线性现象,为EMB系统的高性能控制算法设计(如摩擦补偿、滑模控制)与结构优化提供了高可信度的仿真平台。; 适合人群:从事汽车电子制动系统、电机驱动控制、机电系统建模与仿真研究的研究生、科研人员及工程技术人员,具备扎实的机械动力学、自动控制理论基础和MATLAB/Simulink仿真能力。; 使用场景及目标:①用于高精度电子机械制动系统的设计验证与性能预测;②为消除摩擦非线性影响的先进控制策略(如自适应控制、智能控制)提供精确的被控对象模型;③深入探究Stribeck摩擦等非线性因素对系统动态性能(如响应延迟、稳态误差)的作用机理; 阅读建议:读者应结合提供的Simulink模型文件,深入剖析Stribeck摩擦模块的数学实现与参数辨识方法,建议通过改变输入指令(如阶跃、正弦)和负载条件进行对比仿真,以直观理解非线性摩擦对系统动态特性的影响。

62,271

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧