我在我的應用程序,這是用來存放從我的數據庫中的數據和查找信息時,使用了大量的靜態列表的:C#使用()語句和數據的高速緩存
public static IList<string> Names;
我也有一些方法來從數據庫中刷新這個數據:
public static void GetNames()
{
SQLEngine sql = new SQLEngine(ConnectionString);
lock (Names)
{
Names = sql.GetDataTable("SELECT * FROM Names").ToList<string>();
}
}
我最初沒有必須到位鎖(),但我注意到很偶然,請求線程無法找到該列表中的信息。現在,我假設,如果請求線程試圖訪問名稱列表,它不能直到它完全更新。
這是lock()語句的正確方法和用法嗎?
作爲一個旁註,我注意到MSDN上的一個不應該在公共變量上使用lock()。有人能詳細說明我的特殊情況嗎?
建議的做法是使用單獨的專用對象進行鎖定,而不是自己的位置 – 2012-02-16 07:30:15
@HarisHasan:爲什麼? – jgauffin 2012-02-16 07:35:47
http://stackoverflow.com/questions/230716/difference-between-locklocker-and-lockvariable-which-i-am-using – 2012-02-16 07:41:21