2016-10-01 75 views
1

我在過去的幾個月裏一直在PowerShell中工作得很厲害。得說,它讓我感到驚訝。我認爲只是CMD的過度膨脹版本實際上是一種非常強大的面向對象的多功能.NET語言。PowerShell中的處理和清理 - 手動還是自動?

我以前在語言(所有自學)方面的經驗一直是Java,C++和佈線(淡化的Arduino/C++的粒子變體),其中很多都是在受限環境中(CoAP)。在受限制的嵌入式環境中工作使我更瞭解內存處理和佔用*。如果您的系統資源有限,內存泄漏在未選中時可能會造成嚴重破壞。

就這樣說,我不確定PowerShell是否直觀地處理內存分配和處理。因爲它是一種更高級的語言,所以這些都是在幕後照顧的,但我想確保它是有道理的。我看到一個PowerShell腳本,當使用特定的$object完成時,實際上調用了$object.Dispose()

那麼,我需要爲我創建的每個New-Object調用一個Dispose()方法嗎?

謝謝!


*據我所知,有像一個ATMEGA328P微控制器相比,像一臺計算機或服務器的信息系統的系統(30KB ROM \ 2KB RAM)大幅差異,但是,如果留在持續運行 - 狀態,內存泄漏加起來並可能導致崩潰。另外,我知道一旦會話結束,所有內容都會被丟棄。

回答

2

這不是必需的,但它仍然是一個好習慣。沒有它PowerShell仍然會在你之後清理,但可能需要更長的時間。當然,只要你的代碼持有對它們的引用,對象就不會自動處理。

Related

+1

太棒了。謝謝!如果您不介意我在這裏提出另一個問題,請參閱您提供的答案:是否允許在PowerShell中使用指針?這很大程度上與PowerShell腳本的預期用途有關 - 我希望以持久狀態運行它。如果我可以在開發過程中減輕風險,那麼在生命週期管理期間就會更容易。 – Rincewind

+2

我不認爲PowerShell允許訪問指針。你可以使用引用('[ref]'),而且對象通常都是通過引用傳遞的(如果你想創建一個實際的副本,你需要顯式地克隆對象),但是這是關於它的AFAIK。 –