我已經創建了一個由4塊(包括一個可選塊)組成的數據流管道,它負責通過HTTP從我的應用程序接收查詢對象,並從數據庫中檢索信息,做一個可選的轉換該數據,然後將信息寫回HTTP響應中。數據流管道持有內存
在我做的一些測試中,我一直在從數據庫中拉出大量數據(570萬行),這些數據存儲在List對象中,並在不同的塊之間傳遞,看起來好像在最後的塊已經完成,內存沒有被釋放。任務管理器中的內存使用量將高達2 GB以上,並且List可能會在每個塊中都出現幾次大的峯值。
我的塊中的簽名是這樣的:
private TransformBlock<HttpListenerContext, Tuple<HttpListenerContext, QueryObject>> m_ParseHttpRequest;
private TransformBlock<Tuple<HttpListenerContext, QueryObject>, Tuple<HttpListenerContext, QueryObject, List<string>>> m_RetrieveDatabaseResults;
private TransformBlock<Tuple<HttpListenerContext, QueryObject, List<string>>, Tuple<HttpListenerContext, QueryObject, List<string>>> m_ConvertResults;
private ActionBlock<Tuple<HttpListenerContext, QueryObject, List<string>>> m_ReturnHttpResponse;
它們鏈接如下:
m_ParseHttpRequest.LinkTo(m_RetrieveDatabaseResults);
m_RetrieveDatabaseResults.LinkTo(m_ConvertResults, tuple => tuple.Item2 is QueryObjectA);
m_RetrieveDatabaseResults.LinkTo(m_ReturnHttpResponse, tuple => tuple.Item2 is QueryObjectB);
m_ConvertResults.LinkTo(m_ReturnHttpResponse);
是否有可能,我可以建立流水線,使得一旦每個塊完成與列表他們不再需要堅持它,以及一旦整個管道完成內存釋放?