空間被占用會導致無法操作裡面的資料?

2022-02-22 09:47:57 字數 2092 閱讀 3891

今天在開發中遇到了這樣乙個問題

簡單來說,就是有乙個介面,使用者會進行一些操作把資料傳到方法內。在方法內我會先吧伺服器中的資料通過id全部拿出來,然後通過迴圈一一匹配,把資料新增到另外一片記憶體中。最後,我想要把新新增的資料覆蓋使用者操作的資料,奇蹟的事情發生了。。。

大家可以看到監視器中,list資料為count1

data1的資料為0

在上面的**中,我將data1的資料直接給了list

發現沒有?

list的資料沒有變哎,why?????

下面上**,首先是我的model

1

public

class

amodel24

public listbmodels 5}

67public

class

bmodel810

public

int bstatus

11 }

接著是我的邏輯塊

1

public

async

static

void testtest(listlist)211

};12

for (int i = 0; i < list.count; i++)

1320

}21 list =data1;

22 }

呼叫方法

1

var amodel = new list()2,

12new

bmodel()

1316}17

}18};19 testtest(amodel);

實在百思不得其解的我,只能一步步的使用排除法來嘗試

會不會是因為我在查詢條件裡使用了傳輸資料呢?

var servicedata = model1.firstordefault(c => c.bid == list[i].bmodels[j].bid);
我把這行**進行了分解

1

var bid =list[i].bmodels[j].bid;

2var servicedata = model1.firstordefault(c => c.bid == bid);

然後再來試一下

ok了。。。

可是。。。

why???

難道是因為不使用變數,某些記憶體不會進行釋放?

還是。。快取?

只有開闢出一片新的空間,供別處呼叫,才不會影響原有資料?

各種各樣的方法在我的腦中打轉

忽然乙個念頭衝進了我的腦中,難道是因為async?畢竟這個是4.5之後才封裝出來的東西

可是,這個也不應該啊,就算是async,也不應該會影響賦值操作吧?引用型別?

先試試再說,把**復原,刪掉async

果然如此。

那麼,我是不是可以理解為,當使用非同步時,

var servicedata = model1.firstordefault(c => c.bid == list[i].bmodels[j].bid);

當我使用乙個變數去接收時,

var bid = list[i].bmodels[j].bid;

相當於開放了一部分空間供list[i].bmodels[j].bid 來使用,所以,即使我再方法結束後,再重新給原資料賦值,因為沒有用到bid這份空間,所以也就沒了牽連?

以上全是小弟自己研究,如果有不對的地方,希望各位大神能指出來。

雖然困擾我的問題已解決,但是卻不知道理解的對不對。。

安裝sqlserver導致80埠被占用解決方法

系統占用的埠一般都是微軟官方的產品占用的。所以這個時候主要考慮到幾個服務 sql server導致。其中很有可能是sql server reporting services mssqlserver 它是 sql server 的日誌系統。iis 服務。如果你電腦安裝了這個,很有可能它在執行著,那麼它...

mysql表空間被占用,同名表無法建立或匯入

刪除mysql表 用的是innodb 時沒有用drop table命令,只是簡單刪除表目錄,這導致表空間還存在,這樣就不可以加同名表進去。當要重新匯入新的同名表或者建立新的同名表時,會提示錯誤 error tablespace for table database temp exists.pleas...

Apache預設埠80被占用無法啟動服務問題

在實際工作中,有時執行apache服務,會發現apache預設埠80被占用無法啟動服務,然後查詢時卻發現無法具體哪個程序被占用,這個時候我們應該怎樣去解決問題呢?1 首先通過cmd 的netstat ano命令檢視具體哪個程序占用埠80。2 然後進入任務管理器關閉pid為4的程序,結果沒有找到pid...