[雜記]一些感悟,隨時更新

1.用程序更新數據庫時間的時候,最好用在sql 語句中操作時間。比如:在sql語句中使用getdate()、dateadd()等函數。在程序中使用獲取的時間字符串跟客戶端運行平臺的時間設置有關,可能會出現”2015-09-06 星期日 下午13:14”這樣的字符串,這不能被數據庫識別爲有效的時間格式。

2.寫在finally塊中的代碼一定不要出錯!!!

3.一些重要的代碼,儘量使用try-catch

4.WPF跟WinForm在這一點上是相同的:簡單點來講就是——刷新界面的活只能在UI線程裏跑。你的問題是:你試圖在另一個線成裏刷新UI,這時候錯誤就會拋出,因爲非UI線程是不能親自刷新UI的,它們需要告訴UI線程:“我們需要你幫助把UI刷新一下”。

如果你是在.xaml.cs文件中,你可以直接調用Dispatcher.Invoke((Action)delegate { /* Your
code is put here */ });

如果你在ViewModel裏,你可以Application.Current.Dispatcher.Invoke((Action)delegate { /* Your code is put here */ });
  
5. 問題事件名稱: CLR20r3  ...問題簽名 04: System.Data...問題簽名 09: System.Data.SqlClient.Sql..
這些問題是程序在客戶端運行出錯的時候,程序給出的錯誤簽名。
出現 CLR20r3的問題, 這是因爲.NET Framework 1.0 和 1.1 這兩個版本對許多未處理異常(例如,線程池線程中的未處理異常)提供支撐,而 Framework 2.0 版中,公共語言運行庫允許線程中的多數未處理異常自然繼續。在多數情況下,這意味着未處理異常會導致應用程序終止。
出現System.Data.SqlClient.Sql這些問題一般都與SQL語句出錯有關。

6.如果項目中引用了其他的第三方的程序集,比如EnterpriseLibraryFCKEditor等,這時候不要簡單從他們的安裝位置引用,而是在你的解決方案下,添加一個Library的目錄,把需要的程序集複製到這裏,然後從Library目錄引用.

7.默認情況下,每個對象都有自己的全部字段的副本。一個對象中的某個字段的修改不會影響到另一個對象中的同名字段。但是如果將某一字段標記爲static,該字段將會被該類所有實例所共享,即此類的所有實例都訪問同一內存地址。
雖然一個靜態字段可以被多個對象所共享訪問,但是並沒有同步的機制,也就是說,如果多個線程視圖同時修改該字段,那麼結果將不可預料。
(那麼,是否說明, 在web工程中,將參數封裝在靜態字段中的方法將不再可行?)

8.C#中類型轉換的時候,使用as關鍵字,當類型轉換失敗的時候,不會引發一場,只會生成一個null變量。

9.結構不會再堆中分配內存,而是直接在棧中分配內存。因此,當涉及到在某個方法或者類內部有大量的實例運算,但是在方法或者類作用域之外不需要用到這些實例的時候,使用結構實例的效率要比使用類實例要高。
但是,如果當實例是作爲參數列表傳遞的時候,使用結構實例的效率要比使用類實例的效率低得多。
因爲,在默認情況下,C#的參數傳遞是通過值傳遞的。每個值類型參數都會被創建一個副本(引用類型參數只傳遞引用地址),而被調用函數所使用的只是這些副本。大型值類型(比如自定義結構)作爲參數傳遞的時候,通過參數傳遞會犧牲一些性能,因爲在創建副本的時候會導致開銷大增,特別是在方法調用頻繁的時候。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章