我的代码(.Net Framework 3.5)中有这个非常奇怪的问题 . 所以,在一个普通的VB.NET程序中,我会做这样的事情:
Dim MyList As New List(Of Integer)
MyList.Add(3)
MyList.Add(5)
MyList.Add(9)
MyList.Add(17)
如果我之后放了一个“休息”的话
Dim MyList As New List(Of Integer)
在代码暂停时将鼠标放在“MyList”上,我应该得到:Count = 0 . 但是,我有一个sub,我在那里创建一个列表并得到(当我在它之后打破):“Count =属性评估失败” .
好像我的列表没有足够的空间容纳数据......这是我用来尝试所有内容的完整代码(顺便说一下,代码本身并没有真正意义,因为它是我项目的一部分) . 有了它,我可以创造“怪异”的行为,任何人都可以测试这个 . 这是代码(抱歉代码块按钮不起作用):
Structure lPossibilitiesOutputStruct
Dim Pinion As GearOutputStruct
Dim Gear As GearOutputStruct
Dim Forces As ForcesStruct
Dim CenterDistance As Double
Dim Pitch As Double
Dim lStagePossibilities As List(Of lPossibilitiesOutputStruct)
End Structure
Structure GearOutputStruct
Dim TeethNbr As Integer
Dim RPM As Double
Dim FaceWidth As Double
Dim OutsideDiameter As Double
Dim Addendum As Double
Dim WholeDepth As Double
Dim OperatingPitchDiameter As Double
Dim OverPinData As OverPinOutputStruct
Dim SpanData As SpanOutputStruct
Dim AllowableBendingPower As Double
Dim AllowablePittingPower As Double
End Structure
Structure OverPinOutputStruct
Dim PinDiameter As Double
Dim OverpinMeasurement As Double
End Structure
Structure SpanOutputStruct
Dim TeethNbr As Integer
Dim SpanMeasurement As Double
End Structure
Structure ForcesStruct
Dim GearSetAxialForce As Double
Dim GearSetRadialForce As Double
Dim GearSetTangentialForce As Double
End Structure
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim lStagePossibilities As New List(Of lPossibilitiesOutputStruct)
Dim MyList As New List(Of Integer)
MyList.Add(3)
MyList.Add(5)
MyList.Add(9)
MyList.Add(17)
lStagePossibilities = lGeneratePossibilities(Nothing, Nothing, 3, 1)
End Sub
Private Function lGeneratePossibilities(ByVal ActualStage As lPossibilitiesOutputStruct, ByVal CSL As List(Of Integer), ByVal MaxStage As Integer, ByVal CumulatedRatio As Double) As List(Of lPossibilitiesOutputStruct)
Return Nothing
End Function
我所做的只是创建一个带有表单的新项目并创建该代码 . 项目中没有别的东西 . 我玩“目标CPU”,这就是全部......
如果我使用编译选项运行该程序以使用x86 CPU,并在“lStagePossibilities = ...”上暂停,当我将鼠标放在MyList上时,我得到“Count =属性评估失败” . 如果我用x64 CPU运行它,那么一切正常......(“Count = 4”) . 如果我回到x86 CPU,我会收回错误 . 更糟糕的是,如果我在lPossibilitiesOutPutStruct结构声明中注释“Dim Pinion as GearOutputStruct”或“Dim Gear as GearOutputStruct”或“Dim Forces as ForcesStruct”这一行,那么x86 CPU的一切正常......
它可能与列表的最大大小有关吗???
谢谢 !
吉恩
1 回答
我敢打赌,如果你把一些Strucures改成Classes,问题就会消失 . Visual Studio中的一个众所周知的错误是,当Structures变大并尝试分配大量本地内存时,调试器中的内容会变坏 . 一些结构包含其他结构,内存加起来 . 我打赌在x64中,由于打包,结构的大小变大了 .
引用一些 MSDN 博客