0
該項目針對.net 2.0。我在使用一個新的線程實例化的方法:Thread.Sleep在後臺線程中使用100%來自一個系統處理器
myThread = New Threading.Thread(AddressOf myClass.MyMethod)
myThread.Start()
子是這樣的:
Sub myMethod()
Dim fs As New IO.FileInfo(sFile)
While Not DateDiff(DateInterval.Second,
dtCurrentTime, Now()) > iTimeOutInSeconds
fs.Refresh()
If fs.Exists Then
fs.Refresh()
If fs.Length > 0 AndAlso fs.Length = iGrowing Then
bFileExists = True
Exit While
End If
iGrowing = fs.Length
System.Threading.Thread.Sleep(1000)
End If
End While
End Sub
我等到文件停止增長。問題是,如果我從主線程調用它,如:
Call myClass.MyMethod()
它工作正常,很少處理器功耗被消耗。但是如果我在單獨的線程中調用它,則會消耗一個核心機器中的所有處理器能力,或者多核心機器中的一個核心。 任何人都知道另一種做法,「延遲」沒有超過procesor?
這是非常脆弱的代碼。如果負責「增長」文件的進程得到短暫的優先權,會怎樣?你的代碼會錯誤地認爲文件已經完成增長,並繼續做它將要做的事情。糟糕,那麼其他進程就會回到修改文件!您需要使用通知,而不是連續輪詢。讓其他程序*在完成修改文件時告訴你*。 –
該代碼在文件不存在時燒錄100%核心。 DateDiff()返回一個數字,對數字使用Not運算符根本沒有意義。很難猜測是什麼意圖。 –
@HansPassant - 也許你錯過了該行末尾的iTimeOutInSeconds? :) –