台灣最大程式設計社群網站
線上人數
1007
 
會員總數:246037
討論主題:189624
歡迎您免費加入會員
討論區列表 >> ASP.NET >> 靜態方法中如何使用非共享的全域變數
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
靜態方法中如何使用非共享的全域變數
價值 : 20 QP  點閱數:208 回應數:4
樓主

Khans
門外漢
0 1
46 2
發送站內信

目前小弟使用ThreadPool來不斷執行撈資料庫的動作,並將撈出來之資料存到全域變數,再來前端不斷跑迴圈來抓這個變數的值。
但使用非同步的方法只能用靜態方法,所存取的變數也只能用靜態宣告,而用了靜態宣告後呢,又因為ASP.NET的static宣告變數為共享性的,所以只要登入這個頁面的使用者就會相互影響這個變數值.....
請問各位大大有比較好的方法解嗎?




搜尋相關Tags的文章: [ 靜態方法 ] , [ 非同步 ] , [ static ] ,
本篇文章發表於2020-05-15 15:47
1樓
最有價值解答

缺氧的羊:窒息
捐贈 VP 給 缺氧的羊:窒息 檢舉此回應
看不懂你的問題...

前端只有讀取變數值, 哪來的互相影響變數值?
=======================

如果你是指每個存取頁面的人, 都要取得各自的資料,

那就把你要儲存的變數, 也分成每個人各自一份不就好了?


宣告靜態的 List, Hashtable, 之類的,
然後依照存取者的ID來寫入資料, 不就可以各自讀取各自的資料了?
本篇文章回覆於2020-05-15 16:00
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
回應

topcat
捐贈 VP 給 topcat 檢舉此回應
開發Web與開發單機
概念上會有很大步一樣的思考模式

比如說,Web基本是沒有狀態的
一切狀態的保留要藉由一些特別的機制來處理

但單機中,我開啟個東西,為了要重複的使用,就把他保留在記憶體中共用

回到您的問題

目前小弟使用ThreadPool來不斷執行撈資料庫的動作,並將撈出來之資料存到全域變數,再來前端不斷跑迴圈來抓這個變數的值。
但使用非同步的方法只能用靜態方法,所存取的變數也只能用靜態宣告,而用了靜態宣告後呢,又因為ASP.NET的static宣告變數為共享性的,所以只要登入這個頁面的使用者就會相互影響這個變數值.....
請問各位大大有比較好的方法解嗎?


問題沒有直接說明您想要的效果
只說了會互相影響靜態變數的數值

所以您要每個人都有一份專屬自己的資料變數
彼此不互相影響的
是這樣麼?
還是您的需求是什麼?
(針對需求來描述)

前面說過,Web預設是沒有狀態的,所以必須用一些機制來存放每位不同Client端
例如,Session, Cookie, ....等機制

因此,您也許不該用靜態的變數去存放,而是依據您的需求,選擇適當的機制來存放資料
什麼機制是適當,還是要回歸到您的需求是什麼
不同的需求會用不同的機制

^.^a






本篇文章回覆於2020-05-15 17:07
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
作者回應

Khans
檢舉此回應
謝謝兩位高手,抱歉我表達能力不夠好...
宣告靜態的 List, Hashtable, 之類的,
然後依照存取者的ID來寫入資料, 不就可以各自讀取各自的資料了?

原來這麼簡單可以解決我的問題,看來可能頭腦運轉不過來了..
本篇文章回覆於2020-05-21 19:17
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
作者回應

Khans
檢舉此回應
所以必須用一些機制來存放每位不同Client端
例如,Session, Cookie, ....等機制

因為我使用了ThreadPool的方法,只能呼叫靜態方法,我就是一直卡在如何讓靜態方法可以使用Session、ViewState等機制,完全沒有想到使用一個靜態的具有key/value關係的資料結構就可以解決我的問題了哈哈...
本篇文章回覆於2020-05-21 19:24
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.