我在我的應用程序中使用了SQL Server管理對象。應用程序中SMO對象的大多數操作都是直接從UI觸發的。例如。用戶操縱一個對象,導致從SMO對象(表,視圖,...)讀取或寫入屬性。從多個線程使用SMO
現在我想介紹一個後臺操作,它將定期掃描一些對象(只讀)。
我的問題是如果這可能導致SMO問題。從文檔中我知道對象的實例成員不是線程安全的。所以我的計劃是每當從UI或後臺線程訪問它時,都會鎖定每個SMO對象。但是如果我同時訪問兩個不同的對象(例如View和Table),會發生什麼。即使我只讀了一個屬性,該對象可能也沒有完全創新,需要從數據庫中加載。因此,在最壞的情況下,SMO需要同時對兩個對象進行初始化。由於我不知道SMO如何在內部處理這個問題,所以我想知道是否有人知道SMO是否允許這樣做,否則會導致問題。
有關如何解決此問題的其他建議?我想避免爲整個SMO庫設置全局鎖...
謝謝!
需要更好地定義「將定期掃描某些對象」的「某些對象」。你在SMO對象上做什麼類型的操作? – Paparazzi 2012-08-05 19:03:25
我正在讀取所有標準數據庫對象(數據庫,表,視圖,存儲過程)中的名稱和模式,以向用戶顯示數據庫樹,就像在SQL Server Managment工作室中一樣。然後,我正在讀寫這些對象的MS_Description屬性,這些對象位於ExtendedProperties內部。後臺線程定期讀取相同的屬性。 – aKzenT 2012-08-06 07:48:34
不知道全局鎖對象是什麼意思,也沒有完全初始化。在完全初始化之前,您無權訪問對象。如果你同時初始化兩個對象,那麼你有兩個對象。什麼是問題? – Paparazzi 2012-08-06 12:49:46