Tôi đã viết một lớp C# có tên là "Danh sách Danh sách tăng gấp đôi" với một số dữ liệu (không quan trọng dữ liệu là gì, bây giờ nó chỉ là rác) :), cho mục đích thử nghiệm:Tại sao sử dụng Tuple nhanh hơn một Danh sách trong ví dụ này?
đây là mã:
class test
{
public test()
{
_myListOfList = new List<List<double>>(1000000);
}
public void Run()
{
for (int i = 0; i < _myListOfList.Capacity; i++)
{
_myListOfList.Add(
new List<double>(3) { i, 10*i, 100*i}
); //Populate the list with data
}
}
private List<List<double>> _myListOfList;
}
tôi đã so sánh tốc độ thực hiện của mã này như sau: (thay thế Danh sách đôi bởi một tuple)
class test
{
public test()
{
_myListOfTuple = new List<Tuple<double, double, double>>(1000000);
}
public void Run()
{
for (int i = 0; i < _myListOfTuple.Capacity; i++)
{
_myListOfTuple.Add(
new Tuple<double, double, double>(i, 10 * i, 100 * i)
); //Populate the list with data
}
}
private List<Tuple<double, double, double>> _myListOfTuple;
}
Hóa ra rằng việc sử dụng các tuple dường nhanh hơn đáng kể. Tôi chạy đoạn mã này để kích thước Danh sách khác nhau (từ 200.000 yếu tố -> 5 triệu yếu tố trong danh sách) và đây là kết quả tôi nhận được:
tôi có thể không thực sự có được quanh đầu tôi thế này. Làm thế nào tôi có được một sự khác biệt đáng kể? Sử dụng một Tuple lưu trữ đối tượng cùng loại (gấp đôi ở đây) không có ý nghĩa nhiều. Tôi muốn sử dụng một List/array để làm điều đó: tôi đang làm gì sai? Có cách nào tôi có thể làm cho trường hợp # 1 chạy nhanh/nhanh hơn trường hợp # 2 không?
Cảm ơn!
Tại sao điều này lại đáng ngạc nhiên? Phải mất nhiều công việc hơn để xử lý việc lưu trữ một số lượng lớn các đối tượng tùy ý để lưu trữ chính xác 3 đối tượng. – Servy
Chi phí đầu tư. Đối với một điều, bao nhiêu không gian bạn sẽ mong đợi một tuple tăng gấp đôi chiếm so với một danh sách? Bạn sẽ mong đợi họ có nội dung gì cho từng loại? –
thu nhỏ thậm chí sự khác biệt nhỏ lên đủ khiến chúng trông lớn hơn .. – TaW