【发布时间】:2015-01-07 08:39:14
【问题描述】:
我正在开发的程序使用多个不同的 .txt 文件来存储其数据。假设我们的文件如下所示:
a1; b1; c1;
a2; b2; c2;
...
为了处理这样的文件,我创建了一个类,假设它被称为 CFile。现在我编写了函数来获取每个向量 a、b 和 c。他们的工作方式如下:
Public Shared Function getAFromFile() As List(Of Double)
Dim datei As New FileStream(filePathSelectedInForm, FileMode.Open)
Dim leser As New StreamReader(datei)
Dim zeile As String
Dim werte() As String
Dim a As New List(Of Double)
Dim b As New List(Of Double)
Dim c As New List(Of Double)
While leser.Peek <> -1
zeile = leser.ReadLine
werte = zeile.Split(";")
a.Add(werte(0))
b.Add(werte(1))
c.Add(werte(2))
End While
leser.Close()
datei.Close()
getAFromFile = a
End Function
当然我现在想用数据计算一些东西。假设我想将每个 Double 与另一个名为 x 的文件的 Double 相乘,然后添加另一个名为 r 的值。所以我在我的类中生成了另一个函数,如下所示:
Public Shared Function calculateWithA(r as Double) As List(Of Double)
dim a as List(Of Double) = getAFromFile()
dim x as List(Of Double) = getXFromFile()
Dim result As New List(Of Double)
For i = 0 To a.Count - 1
result.Add(a.Item(i) * x.Item(i) + r)
Next
calculateWithA = result
End Function
假设我们在一个表单上有一个datagridview,它填充了我们的向量a、b和c。所以我们有 3 列和未定义的行数,具体取决于文本文件中 a、b 和 c 元素的数量。 现在我添加了第四行,我想在其中存储计算值。正确的方法是打开我的文件,获取向量a,打开另一个文件,获取向量x,将它们相乘,加上r,然后将其写入datagridview。
现在想象 r 是 datagridview-row 的索引。我现在需要一个从 r=0 到 'amount of rows-1' 的循环并调用 calculateWithA(r)。每次调用该函数时,都会在其中调用两个函数 getAFromFile() 和 getXFromFile()。我认为打开文件非常慢,这就是为什么我认为最好将 a 和 x 公开共享 List(Of Double) 并只获取它们一次,然后在函数 calculateWithA 中使用它们。像这样的:
Private Shared a As New List(Of Double)
Private Shared x As New List(Of Double)
Public Shared sub getAandX()
a = getAFromFile()
x = getXFromFile()
Dim result As New List(Of Double)
For i = 0 To a.Count - 1
result.Add(a.Item(i) * x.Item(i) + r)
Next
End Sub
Public Shared Function calculateWithA(r as Double) As List(Of Double)
Dim result As New List(Of Double)
For i = 0 To a.Count - 1
result.Add(a.Item(i) * x.Item(i) + r)
Next
calculateWithA = result
End Function
在这种情况下,我可以多次调用calculateWithA(r),而处理文件的性能密集型函数只调用一次。但我必须在使用 calculateWithA(r) 之前调用 getAandX(),否则我会收到错误或使用 a 和 x 的旧值。这就是我的问题所在: 我希望我的程序尽可能模块化,并遵循面向对象程序的规则。但是,如果我必须调用一个函数来确保另一个函数有效,那就违反了这些规则,对吧?但是,如果我使用我的模块化版本,每次调用该函数时都调用每个文件,我会得到一个非常糟糕的性能和很长的等待时间。 你们说什么?我应该走哪条路或者有更好的方法来解决这个问题?
提前致谢!
【问题讨论】:
标签: vb.net file shared object-oriented-analysis