Dưới đây là các tiêu chuẩn của phương pháp mở rộng LINQ. Các kết quả thu được trong quá trình phát triển một chương trình thực sự.
Các thử nghiệm: 2 danh sách (lst1 và lst2) mỗi khoảng 2.50000 đối tượng. Mỗi đối tượng (class Key) chứa một chuỗi và một số nguyên. Danh sách thứ hai chủ yếu chứa các mục tương tự như mục đầu tiên, nhưng một số mục nhập mới được thêm vào và một số mục được xóa.
Tôi đã thử nghiệm phương pháp Mở rộng ngoại lệ.
var ngoại trừ = lst2.Except (lst1);
Danh sách lst = except.ToList();
Hai dòng này tạo ra 600 danh sách các mục “bổ sung mới”. Tôi đã hẹn giờ nó bằng cách sử dụng đối tượng StopWatch. Tốc độ đáng kinh ngạc: 220 ms. Máy tính tôi sử dụng không phải là "Gonzales nhanh". Core 2 Duo T7700 - 2,4 GHz.
Lưu ý:
Đây là khóa lớp, triển khai IEquatable i-face.
public class Key : IEquatable<Key>
{
public int Index { get; private set; }
public string Name { get; private set; }
public Key(string keyName, int sdIndex)
{
this.Name = keyName;
this.Index = sdIndex;
}
// IEquatable implementation
public bool Equals(Key other)
{
//Check whether the compared object is null.
if (Object.ReferenceEquals(other, null)) return false;
//Check whether the compared object references the same data.
if (Object.ReferenceEquals(this, other)) return true;
//Check whether the products' properties are equal.
return Index.Equals(other.Index) && Name.Equals(other.Name);
}
// If Equals() returns true for a pair of objects
// then GetHashCode() must return the same value for these objects.
public override int GetHashCode()
{
//Get hash code for the name field if it is not null.
int hashKeyName = Name == null ? 0 : Name.GetHashCode();
//Get hash code for the index field.
int hashKeyIndex = Index.GetHashCode();
//Calculate the hash code for the Key.
return hashKeyName^hashKeyIndex;
}
}
Nguồn
2011-10-25 22:03:07
Bạn có biết loại bảo đảm hiệu suất là gì không?Có lẽ ngoại trừ sẽ phải thực hiện một bản sao được sắp xếp của mỗi mảng đầu tiên. Tôi không thể tìm thấy bất kỳ điều này trên MSDN. – Eclipse
Không, nó không tạo bản sao được sắp xếp. Nó tạo ra một tập hợp từ chuỗi bị loại trừ, và sau đó lặp qua chuỗi nguồn, sinh ra bất kỳ phần tử nào không nằm trong chuỗi bị loại trừ. –
(Khi tôi nói "set" nghĩa là "hash set".) –