我有这个功能,根据可用的库存计算某些产品的建议价格,现在它不重要但它不知道但是我的程序运行得像x10更快没有它我真的很困惑,我不知道为什么它很慢
Dim MinPrice As Double
Dim VAT = 1.1899999999999999
Dim margin1
Dim potherrule1 As String
Dim margin2
Dim potherrule2 As String
Dim margin3
Dim potherrule3 As String
Dim defaultmargin
If SupplierMargin IsNot Nothing Then
margin1 = SupplierMargin(0)
potherrule1 = SupplierPother(0)
margin2 = SupplierMargin(1)
potherrule2 = SupplierPother(1)
margin3 = SupplierMargin(2)
potherrule3 = SupplierPother(2)
defaultmargin = SupplierMargin(3)
End If
If IsDBNull(CurrentPother) Or (potherrule1 = "x" And potherrule2 = "x" And potherrule3 = "x") Then
MinPrice = Math.Round((oprice / (1 - defaultmargin)) * VAT, 2)
Return MinPrice
End If
If Not IsDBNull(CurrentPother) Then
If potherrule1 <> "x" Then
Dim v1 As Integer
Dim v2 As Integer
Dim rule As String = potherrule1
Dim parts() As String = rule.Split(New String() {" bis "}, StringSplitOptions.None)
v1 = Integer.Parse(parts(0))
v2 = Integer.Parse(parts(1))
If CurrentPother >= v1 And CurrentPother <= v2 Then
MinPrice = Math.Round((oprice / (1 - margin1)) * VAT, 2)
End If
Return MinPrice
ElseIf potherrule2 <> "x" Then
Dim v1 As Integer
Dim v2 As Integer
Dim rule As String = potherrule2
Dim parts() As String = rule.Split(New String() {" bis "}, StringSplitOptions.None)
v1 = Integer.Parse(parts(0))
v2 = Integer.Parse(parts(1))
If CurrentPother >= v1 And CurrentPother <= v2 Then
MinPrice = Math.Round((oprice / (1 - margin2)) * VAT, 2)
Return MinPrice
End If
ElseIf potherrule2 <> "x" Then
Dim v1 As Integer
Dim v2 As Integer
Dim rule As String = potherrule3
Dim parts() As String = rule.Split(New String() {" bis "}, StringSplitOptions.None)
v1 = Integer.Parse(parts(0))
v2 = Integer.Parse(parts(1))
If CurrentPother >= v1 And CurrentPother <= v2 Then
MinPrice = Math.Round((oprice / (1 - margin3)) * VAT, 2)
Return MinPrice
End If
Else
MinimumPriceWhenPother4IsDBnull(SupplierMargin, oprice)
End If
End If
你能否提出一些可以加快这项功能的改进措施?
答案 0 :(得分:0)
除了@Tim Schmelter上面的评论,你确实意识到你的第三个条件仍然是在看potherrule2?因此,我的猜测是,当potherrule3为&lt;&gt;时,您的代码默认为您的MinimumPriceWhenPother4IsDBnull函数。 “x”并且您希望它进行评估。不确定该功能是做什么的,但是如果它运行很多,那可能会导致你的速度问题。
答案 1 :(得分:0)
我同意@APrough的意见,问题可能是由于你的第三个ElseIf进行了错误的比较,然后该方法意外地降至MinimumPriceWhenPother4IsDBnull(SupplierMargin, oprice)
。那个方法你在做什么?你有可能在那时从数据库中读取吗?
前三个If处理程序中的每一个都可以被分解为另一种方法来增加代码重用。但它不会增加穿孔。
另一个警告点。注意Math.Round。默认情况下,它使用ANSI标准舍入到最近的偶数而不是在学校学到的舍入。见http://www.thinqlinq.com/Post.aspx/Title/Rounding-in-.Net。但这不会导致10倍的性能下降。
此外,您可能希望在VS ultimate中运行性能分析,或者获取Ants剖析器的评估,以查看代码中真正的瓶颈所在。它通常可以被事件处理程序,方法调用或其他意外的地方隐藏。