我的背景是與Web應用程序(PHP),您請求一個頁面,運行您的代碼來處理該請求,並且該過程結束後,您通常不必擔心很多關於聯合國 - 設置變量和類似的東西,因爲一旦頁面加載完成該過程。從Web應用程序到桌面應用程序
用C#研究一些桌面應用程序開發,只是好奇這與Web不同。假設我啓動該程序,用戶執行某些操作,該程序不會像Web應用程序那樣完成,那麼您做什麼不同?當完成它們以避免內存浪費時,您是否必須意識到未設置變量和事物?
我的背景是與Web應用程序(PHP),您請求一個頁面,運行您的代碼來處理該請求,並且該過程結束後,您通常不必擔心很多關於聯合國 - 設置變量和類似的東西,因爲一旦頁面加載完成該過程。從Web應用程序到桌面應用程序
用C#研究一些桌面應用程序開發,只是好奇這與Web不同。假設我啓動該程序,用戶執行某些操作,該程序不會像Web應用程序那樣完成,那麼您做什麼不同?當完成它們以避免內存浪費時,您是否必須意識到未設置變量和事物?
大多數網頁編程是無狀態。通過桌面編程,您的個人功能通常是無狀態的。您將通過所需的所有信息作爲參數,並將所需的所有內容都退出。但是,主程序會存儲一些狀態。
富互聯網應用程序經常保持狀態,一些網站使用HTML內容本身的狀態,並通過JavaScript更新等
桌面程序的用戶界面相似。編輯和其他各種控件存儲一些狀態。您將存儲一些全局變量,例如用戶設置,您可以認爲它們與會話變量類似。運行應用程序與創建會話類似。
桌面編程也是基於事件的。很多時候,程序會坐在那裏等待用戶點擊按鈕或其他東西。所以,通常我們正在談論Windows和事件處理程序。你可能在Javascript中熟悉這些。
C#沒有垃圾回收功能,所以你不必擔心刪除變量。一旦他們超出範圍,他們通常會被清理乾淨。在應用程序關閉之前,全局類變量將不會被清理,並且在關閉應用程序時不必清除變量。當流程結束時,它們都會消失,就像PHP一樣。
在應該使用本地變量時,不要使用函數內部的全局變量(它不會超出範圍)。
PHP也有本地和全局變量,所以這應該是熟悉的領域。
感謝您的提示,從我可以看到的情況來看,似乎一切都是命名空間=> class =>方法的一部分,因此在C#中將被視爲全局變量,我的意思是從我所能看到的變量始終處於內部一個類或方法,那麼有沒有辦法來定義一個全局? – JasonDavis 2011-12-20 20:35:59
定義爲靜態,它們被認爲是全局的,儘管你放在NS和類下,但它們不是基於實例的。 – Kumar 2011-12-20 20:38:40
簡短回答是肯定的。您需要取消註冊事件處理程序,處理對象,刪除強引用等。這看起來取決於代碼的結構。
是的,你需要擔心。大多數情況下,您可能不必擔心託管對象由垃圾收集器處理的非管理對象。
在大多數情況下(至少在C#中標記爲問題,而且在其他環境中),內置垃圾回收將很好地處理未使用資源的取消分配。當然,您仍然可能會意外地創建內存泄漏,但您也可以在網頁上輕鬆地完成內存泄漏。 – David 2011-12-20 20:11:05
一般來說,表現可能不會是你最大的障礙。斷開無狀態的請求 - 響應系統和正在運行的應用程序之間的認知切換是一個很大的問題。我經常看到人們在向另一個方向轉換時掙扎。 – David 2011-12-20 20:12:58