簡體   English   中英

在C#中向大型集合添加和刪除對象的復雜性

[英]Complication in adding and removing object to a large collection in c#

幾天前,我遇到一個問題,即我有一個具有歷史數據或大量對象的集合。 此集合暴露給如此多的線程或客戶端,因此,人們可能正在對其進行迭代,並且有些人可能會對其進行添加,而有些人可能會在迭代時將其刪除。 因此,修改可能會在c#中引發“集合更改異常”。

現在,我需要在c#中設計一個數據結構或一個集合,以解決以下挑戰:

  1. 您不能將集合復制到其他對象,因為集合非常大,因此復制它會導致大量內存浪費。

  2. 盡管任何用戶在迭代集合時將其添加到集合中,但應該在集合中添加新對象,並且不應引發任何異常,並且還應在迭代結束時讀取該對象。

  3. 但是,如果用戶從集合中刪除任何項目,則應該拋出異常。

  4. 添加,刪除和迭代應該是線程安全的。 沒有比賽條件。

如果您真的堅持使用集合而不是數據庫。 常規的.NET列表都不是一個好的選擇。 在這種情況下,您可以創建自己的列表類型,以針對您的情況進行優化。

這取決於其他細節(您是否可以使用分頁,是否需要通過索引訪問項目等)可以使用的技術。

一個想法可能是,您創建一個可變列表,並且只有當其更改時,您才創建一個不可變副本。 所有客戶端都使用最后一個不變的副本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM