2010-07-09 19 views
1

WEB斷開架構點「產量」關鍵字的利益閱讀各個崗位和SO問題後,我明白,如果我們有數據的很長鏈,然後與產量將會可以很好,但請告訴我如何就ASP.NET而言它是精通的,或者你可以說斷開連接的Web體系結構的觀點。例如,我通過DAL從數據庫中提取數據,現在連接已斷開。現在,我在從我DAL我的BL數據現在我要申請的foreach的數據(我需要處理每一個逐一的),然後返回集合到我的UI。你認爲在這裏使用產量會很好嗎?是什麼但從

由於 維吉

+0

-1重複的問題同一位用戶提出,並在這裏只接受2天前:http://stackoverflow.com/questions/3195196/what-is-yield-and-what-is-the-benifit-to-use -yield-in-asp-net – 2010-07-09 22:11:14

+0

是的,我問的是關於產量的問題。但這兩個問題都不同。在不同的掃描區域中,沒有人對同一個關鍵字提出多個問題? – Vijjendra 2010-07-09 22:47:29

回答

2

產量基本上指示編譯器生成的枚舉(這是一個簡單的狀態機),該流點播數據,在所述的IEnumerable「拉」的每個元素foreach循環itearing。

所以所有yield語句可以在特定情況下做的是提供懶流語義,這意味着一個接收器可以停止迭代任何時間,從而減少傳輸的數據量。與在一批中返回完全填充的集合相反,這是您在不使用yield時得到的結果。如果這是一件有效的事情取決於你沒有提供任何信息的很多因素,所以我不能再幫你了。

+0

接收器如何在任何時候停止迭代?因爲我們已經將數據從我的DAL帶到datareader,這意味着我們還沒有到達BL層,直到所有的數據都以DAL的形式存在。 – Vijjendra 2010-07-09 21:12:35

+0

@Vijjendra:這裏的假設是客戶端可以在傳輸數據的同時處理數據流。您的客戶端可以繼續,而記錄在流填補了一些列表視圖。I'ts並非不可能不屈服的語法,但它可以幫助.... – 2010-07-09 21:26:54

1

根據您的數據源的佈局,如果你有一個分頁列表視圖,並只想顯示在每個前10個元素。然後,您不必將所有3000個項目發送到斷開連接的網站,這實際上會導致更快的呈現。

當然,這可以用SQL來完成,但是所有數據庫返回一個指針(迭代器),以在您要顯示的集中的第一行。所以,無論哪種方式你都可以獲得性能,但是你獲得多少取決於你的體系結構,以及如何設置數據層,並在你的視圖模型和存儲庫中使用它。

0

收益率與您要問的問題無關。它與性能沒有任何關係。這並不意味着,「屈服CPU」或「產生線程」。這只是創建自定義枚舉的語法的一部分。

+0

同意。我認爲它更像是一種捷徑,更少的代碼,更好的可讀性。 – Jeroen 2010-07-09 21:54:28

+1

@Downvoter:如果你想要任何人關心,你應該解釋你的投票原因。 – 2010-07-09 22:12:50