2
我以前從未在此論壇上發帖,但在研究中使用它很多,但是這一次我找不到答案......也許我只是沒有正確表述它。在同一物體上多次撥打新電話
我在Compact Framework項目中使用SqlCeCommand相當多,我一直在研究一段時間,並且因爲內存不足而出現了一些問題,所以我試圖優化非託管代碼部分。
看看這個:
Dim SQLCmd as SQLCeCommand
SQLCmd = New SQLCeCommand
SQLCmd.Connection = conndb
... Process db stuff
SQLCmd = New SQLCeCommand
SQLCmd.Connection = conndb
... Process db stuff
SQLCmd = New SQLCeCommand
SQLCmd.Connection = conndb
... Process db stuff
SQLCmd.Dispose()
這是正確的,還是我每次我所說的同一對象上新時間失去了記憶?我之所以這樣做而不是保留對象的同一個實例,是因爲我不必每次都明確設置SQLCmd屬性。因爲有些人可能會使用參數,有些人可能不會,所以我認爲使用新參數會更容易確保一切都很清晰。
任何想法或更好的方法來解決這個問題?
感謝您的輸入,這就是我想過參考迷路。 GC仍然可以使用非託管代碼嗎? – henda79
非託管代碼不在垃圾收集器領域之外,基本上,你自己就像在C/C++中一樣。如果您真的打算使用「非託管資源」,請記住垃圾收集器知道所有受管資源,並且在某個時間點GC將釋放所有關聯的內存和資源。 GC不知道非託管資源,例如文件,流和句柄,因此,如果您沒有在代碼中明確清除它們,那麼最終會導致內存泄漏和資源鎖定。 – Steve
好吧,我認爲這清除了它。但是你不能在using塊之外聲明變量。它必須像'使用SQLCmd = New SqlCeCommand'一樣完成,它必須使用SQLCmd作爲New SqlCeCommand,因爲它不支持後期綁定。感謝您的建議。 – henda79