Lợi nhuận rất hữu ích vì nó giúp bạn tiết kiệm không gian. Hầu hết các tối ưu hóa trong lập trình làm cho một thương mại ra giữa không gian (đĩa, bộ nhớ, mạng) và chế biến. Năng suất như một cấu trúc lập trình cho phép bạn lặp qua một bộ sưu tập nhiều lần theo trình tự mà không cần một bản sao riêng của bộ sưu tập cho mỗi lần lặp.
xem xét ví dụ sau:
static IEnumerable<Person> GetAllPeople()
{
return new List<Person>()
{
new Person() { Name = "George", Surname = "Bush", City = "Washington" },
new Person() { Name = "Abraham", Surname = "Lincoln", City = "Washington" },
new Person() { Name = "Joe", Surname = "Average", City = "New York" }
};
}
static IEnumerable<Person> GetPeopleFrom(this IEnumerable<Person> people, string where)
{
foreach (var person in people)
{
if (person.City == where) yield return person;
}
yield break;
}
static IEnumerable<Person> GetPeopleWithInitial(this IEnumerable<Person> people, string initial)
{
foreach (var person in people)
{
if (person.Name.StartsWith(initial)) yield return person;
}
yield break;
}
static void Main(string[] args)
{
var people = GetAllPeople();
foreach (var p in people.GetPeopleFrom("Washington"))
{
// do something with washingtonites
}
foreach (var p in people.GetPeopleWithInitial("G"))
{
// do something with people with initial G
}
foreach (var p in people.GetPeopleWithInitial("P").GetPeopleFrom("New York"))
{
// etc
}
}
(Rõ ràng là bạn không cần phải sử dụng năng suất với các phương pháp mở rộng, nó chỉ tạo ra một mô hình mạnh mẽ để suy nghĩ về dữ liệu.)
Như bạn có thể thấy, nếu bạn có rất nhiều phương pháp "lọc" (nhưng nó có thể là bất kỳ loại phương pháp nào hoạt động trên danh sách mọi người), bạn có thể kết nối nhiều người với nhau mà không cần thêm dung lượng lưu trữ cho mỗi bước. Đây là một cách để nâng cao ngôn ngữ lập trình (C#) lên để thể hiện các giải pháp của bạn tốt hơn.
Tác dụng phụ đầu tiên của sản lượng là nó trì hoãn việc thực thi logic lọc cho đến khi bạn thực sự yêu cầu nó. Do đó, nếu bạn tạo một biến loại IEnumerable <> (với sản lượng) nhưng không bao giờ lặp qua nó, bạn không bao giờ thực thi logic hoặc tiêu thụ không gian vốn là một tối ưu hóa mạnh mẽ và miễn phí.
Tác dụng phụ khác là năng suất hoạt động trên giao diện thu thập chung thấp nhất (IEnumerable <>) cho phép tạo mã giống như thư viện với khả năng ứng dụng rộng.
Nguồn
2008-11-25 15:19:47
Ý của bạn là bên ngoài của LINQ, hoặc IEnumerable? Tôi nên hình dung rằng việc sử dụng năng suất khác với các điều tra viên sẽ khá hiếm (và thú vị). Jon Skeet đề cập đến một trong cuốn sách của mình ... – Benjol
Tôi vẫn còn hoài nghi. – Greg
sử dụng rất thú vị của sản lượng là trong thư viện [Threading Power Threading Library của Jeffrey Richter] (http://msdn.microsoft.com/en-us/magazine/cc546608.aspx) – Yurec