簡體   English   中英

使用parallel.Foreach讀取文件內容並刪除特定行

[英]Reading file contents and Deleting specific lines using parallel.Foreach

Class Student
{
   Int studentId,
   List<ClassB> Books,
   Boolean IsPassed
}

Class Book
{
    Int  bookId,
    List<int> pages
}

在這里,我將書籍數據實際存儲在磁盤中。

BookID1 (Folder Name)

pageNumber1.txt
pageNumber2.txt
pageNumber3.txt
pageNumber4.txt


BookID2 (Folder Name)

pageNumber1.txt
pageNumber2.txt
pageNumber30.txt
pageNumber45.txt

從我的數據庫中,我將返回類似的內容

StudentId         bookId.      Page     IsPassed
1                    1      1,2,3,4      1  
1.                   2      1,2,30,45    1

我將它們放入字典,如下所示

Key = bookId
Value = pages

Dictionary<long, List<int>> inputDictionary

如何並行地從相應的頁面讀取數據並通過行號刪除某些行而不使用多個for循環,我嘗試了這一點。 請讓我知道是否有更好的選擇?

Parallel.ForEach
( 
   inputDictionary
   ,new ParallelOptions { MaxDegreeOfParallelism = 2 }
   , Book =>
  {
    foreach( int pagenumber in Book.Value)
    {
    var bookId = Book.Key.ToString();
    var PathToPage =  GetDisKPath()+bookId+pagenumber+".txt";
    }
    // read the file and delete some lines from page number.
  });

以我不理解您的代碼的方式,您不會以任何方式修改inputDictionary(只需從磁盤上的文本文件中刪除行)。 在這種情況下,您可以堅持使用可以正常工作的代碼,否則請使用線程安全的ConcurrentBag。

第一種情況的另一種方法是使用常規的for循環,並使用async io方法讀取和寫入文件。

異步io操作與綁定CPU的異步操作的不同之處在於它們不生成要執行的線程,這無法通過減少線程切換開銷來加快您的應用程序的速度。

請訪問以下頁面,以獲取有關同步編程和異步io操作的更多信息: 使用Async和Await進行異步編程

異步文件I / O

暫無
暫無

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

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