TL;DR
Sự kết hợp nhanh hơn và nhất quán hơn về tốc độ của nó. Nhưng sự khác biệt là rất ít đối với 1 hoặc 2 biến [dưới .3 giây cho 100 triệu cuộc gọi].
Chỉnh sửa
Sau lần chạy thứ hai, dường như sự kết hợp chủ yếu là nhanh hơn trong hai.
Vì vậy, tôi muốn mở rộng câu trả lời của Analog-Nico bằng cách cung cấp một bài kiểm tra rộng hơn và cũng nhìn [một chút] vào khả năng mở rộng của hai chức năng.
Mã trên Pastebin
Tôi quyết định sử dụng bốn trường hợp thử nghiệm cho mỗi hàm, có một biến ở phía trước, một ở cuối, một ở giữa và hai biến ở giữa. Các thiết lập cơ bản là như nhau. Tôi chỉ sử dụng 100.000.000 lần lặp của hàm và các lần lặp này được chạy 100 lần. Tôi đã sử dụng các cơ chế tương tự để ngăn chặn tối ưu hóa, cụ thể là nhận được tổng độ dài của chuỗi kết quả và ghi lại nó. Tôi cũng đã đăng nhập thời gian cần thiết [để tôi đoán nó sẽ mất bao lâu] nhưng cũng đã lưu nó vào một mảng.
Sau đó, tôi đã tính toán độ lệch trung bình, tối thiểu, tối đa và tiêu chuẩn cho mỗi phương pháp.
Đây là kết quả:
{
sum: {
t: {
start: 2072751,
mid: 2338476,
end: 2083695,
double: 2950287
},
c: {
start: 2086059,
mid: 2345551,
end: 2074732,
double: 2922929
}
},
avg: {
t: {
start: 20727.51,
mid: 23384.76,
end: 20836.95,
double: 29502.87
},
c: {
start: 20860.59,
mid: 23455.51,
end: 20747.32,
double: 29229.29
}
},
sd: {
t: {
start: 335.6251329981114,
mid: 282.9490809315344,
end: 286.2220947096852,
double: 216.40844045461824
},
c: {
start: 255.4803356424913,
mid: 221.48744862858484,
end: 238.98242111084238,
double: 209.9309074433776
}
},
min: {
t: {
start: 20490,
mid: 23216,
end: 20588,
double: 29271
},
c: {
start: 20660,
mid: 23258,
end: 20534,
double: 28985
}
},
max: {
t: {
start: 23279,
mid: 25616,
end: 22887,
double: 30843
},
c: {
start: 22603,
mid: 25062,
end: 22403,
double: 30536
}
}
}
Các giá trị trong ____ ____ 2 đối tượng dành cho các mẫu, các giá trị trong ____ 3-các đối tượng là để nối. start
có nghĩa là biến ở đầu, giữa nó ở giữa, kết thúc rằng ở cuối và gấp đôi có hai biến. sum
là tổng của tất cả 100 lần chạy. avg
là chạy trung bình, có nghĩa là nó là sum / 100
. sd
Đây là lối thoát dễ dàng, Wikipedia [tiếng Anh đơn giản]. min
và
{
"sum": {
"t": {
"start": 1785103,
"mid": 1826679,
"end": 1719594,
"double": 2110823,
"many": 4153368
},
"c": {
"start": 1720260,
"mid": 1799579,
"end": 1716883,
"double": 2097473,
"many": 3836265
}
},
"avg": {
"t": {
"start": 17851.03,
"mid": 18266.79,
"end": 17195.94,
"double": 21108.23,
"many": 41533.68
},
"c": {
"start": 17202.6,
"mid": 17995.79,
"end": 17168.83,
"double": 20974.73,
"many": 38362.65
}
},
"sd": {
"t": {
"start": 858.7857061572462,
"mid": 886.0941856823124,
"end": 786.5366719994689,
"double": 905.5376950188214,
"many": 1744.9005638144542
},
"c": {
"start": 599.0468429096342,
"mid": 719.1084521127534,
"end": 935.9367719563112,
"double": 991.5642274204934,
"many": 1465.1116774840066
}
},
"aad": {
"t": {
"start": 579.1207999999996,
"mid": 576.5628000000003,
"end": 526.8268,
"double": 586.9651999999998,
"many": 1135.9432000000002
},
"c": {
"start": 467.96399999999966,
"mid": 443.09220000000016,
"end": 551.1318000000008,
"double": 610.2321999999999,
"many": 1020.1310000000003
}
},
"min": {
"t": {
"start": 16932,
"mid": 17238,
"end": 16387,
"double": 20016,
"many": 39327
},
"c": {
"start": 16477,
"mid": 17137,
"end": 16226,
"double": 19863,
"many": 36424
}
},
"max": {
"t": {
"start": 23310,
"mid": 24102,
"end": 21258,
"double": 26883,
"many": 49103
},
"c": {
"start": 19328,
"mid": 23203,
"end": 22859,
"double": 26875,
"many": 44352
}
},
"median": {
"t": {
"start": 17571,
"mid": 18062,
"end": 16974,
"double": 20874,
"many": 41171.5
},
"c": {
"start": 16893.5,
"mid": 18213,
"end": 17016.5,
"double": 20771,
"many": 38849
}
}
}
0 là giá trị tối thiểu và tối đa của một lần chạy tương ứng.Kết quả
Có vẻ như các mẫu nhanh hơn cho các biến đơn không nằm ở cuối chuỗi, xem xét rằng trung bình thấp hơn và mức tối thiểu thấp hơn. Nếu bạn đặt một biến ở cuối chuỗi hoặc có nhiều biến trong chuỗi của bạn, việc kết hợp sẽ nhanh hơn.
Mặc dù mức tối thiểu cũng như trung bình của các mẫu tốt hơn so với các đối tác nối của chúng liên quan đến hai điều kiện đầu tiên, độ lệch chuẩn luôn tồi tệ hơn. Sự khác biệt dường như thu hẹp với nhiều biến số hơn [cần nhiều bài kiểm tra hơn].
Vì hầu hết các mẫu có thể sẽ không được sử dụng cho chỉ một biến trong một chuỗi, nên việc nói rằng việc gắn kết với Concatenation mang lại hiệu suất tốt hơn. Nhưng sự khác biệt là [ít nhất là bây giờ] rất nhẹ. Ở mức 100.000.000 [100 triệu] đánh giá với hai biến, chênh lệch chỉ là 273,58 ms, khoảng một phần tư giây ...
Chạy thứ hai
Cuộc chạy thứ hai trông hơi khác nhau. Ngoại trừ giá trị tối đa, độ lệch tuyệt đối trung bình và độ lệch chuẩn, mọi phép đo được chứng minh rằng sự kết hợp nhanh hơn các mẫu.
Ba phép đo được đề cập có giá trị thấp hơn [do đó tốt hơn] cho các mẫu khi biến ở cuối chuỗi hoặc khi có hai biến trong chuỗi.
Đây là kết quả:
{
"sum": {
"t": {
"start": 1785103,
"mid": 1826679,
"end": 1719594,
"double": 2110823,
"many": 4153368
},
"c": {
"start": 1720260,
"mid": 1799579,
"end": 1716883,
"double": 2097473,
"many": 3836265
}
},
"avg": {
"t": {
"start": 17851.03,
"mid": 18266.79,
"end": 17195.94,
"double": 21108.23,
"many": 41533.68
},
"c": {
"start": 17202.6,
"mid": 17995.79,
"end": 17168.83,
"double": 20974.73,
"many": 38362.65
}
},
"sd": {
"t": {
"start": 858.7857061572462,
"mid": 886.0941856823124,
"end": 786.5366719994689,
"double": 905.5376950188214,
"many": 1744.9005638144542
},
"c": {
"start": 599.0468429096342,
"mid": 719.1084521127534,
"end": 935.9367719563112,
"double": 991.5642274204934,
"many": 1465.1116774840066
}
},
"aad": {
"t": {
"start": 579.1207999999996,
"mid": 576.5628000000003,
"end": 526.8268,
"double": 586.9651999999998,
"many": 1135.9432000000002
},
"c": {
"start": 467.96399999999966,
"mid": 443.09220000000016,
"end": 551.1318000000008,
"double": 610.2321999999999,
"many": 1020.1310000000003
}
},
"min": {
"t": {
"start": 16932,
"mid": 17238,
"end": 16387,
"double": 20016,
"many": 39327
},
"c": {
"start": 16477,
"mid": 17137,
"end": 16226,
"double": 19863,
"many": 36424
}
},
"max": {
"t": {
"start": 23310,
"mid": 24102,
"end": 21258,
"double": 26883,
"many": 49103
},
"c": {
"start": 19328,
"mid": 23203,
"end": 22859,
"double": 26875,
"many": 44352
}
},
"median": {
"t": {
"start": 17571,
"mid": 18062,
"end": 16974,
"double": 20874,
"many": 41171.5
},
"c": {
"start": 16893.5,
"mid": 18213,
"end": 17016.5,
"double": 20771,
"many": 38849
}
}
}
Các giá trị trong ____ ____ 2 đối tượng dành cho các mẫu, các giá trị trong ____ 3-các đối tượng là để nối. start
có nghĩa là biến ở đầu, giữa nó ở giữa, kết thúc rằng ở cuối và gấp đôi có hai biến. sum
là tổng của tất cả 100 lần chạy. avg
là chạy trung bình, có nghĩa là nó là sum / 100
. sd
Đây là lối thoát dễ dàng, Wikipedia [tiếng Anh đơn giản]. min
và
{
"sum": {
"t": {
"start": 1785103,
"mid": 1826679,
"end": 1719594,
"double": 2110823,
"many": 4153368
},
"c": {
"start": 1720260,
"mid": 1799579,
"end": 1716883,
"double": 2097473,
"many": 3836265
}
},
"avg": {
"t": {
"start": 17851.03,
"mid": 18266.79,
"end": 17195.94,
"double": 21108.23,
"many": 41533.68
},
"c": {
"start": 17202.6,
"mid": 17995.79,
"end": 17168.83,
"double": 20974.73,
"many": 38362.65
}
},
"sd": {
"t": {
"start": 858.7857061572462,
"mid": 886.0941856823124,
"end": 786.5366719994689,
"double": 905.5376950188214,
"many": 1744.9005638144542
},
"c": {
"start": 599.0468429096342,
"mid": 719.1084521127534,
"end": 935.9367719563112,
"double": 991.5642274204934,
"many": 1465.1116774840066
}
},
"aad": {
"t": {
"start": 579.1207999999996,
"mid": 576.5628000000003,
"end": 526.8268,
"double": 586.9651999999998,
"many": 1135.9432000000002
},
"c": {
"start": 467.96399999999966,
"mid": 443.09220000000016,
"end": 551.1318000000008,
"double": 610.2321999999999,
"many": 1020.1310000000003
}
},
"min": {
"t": {
"start": 16932,
"mid": 17238,
"end": 16387,
"double": 20016,
"many": 39327
},
"c": {
"start": 16477,
"mid": 17137,
"end": 16226,
"double": 19863,
"many": 36424
}
},
"max": {
"t": {
"start": 23310,
"mid": 24102,
"end": 21258,
"double": 26883,
"many": 49103
},
"c": {
"start": 19328,
"mid": 23203,
"end": 22859,
"double": 26875,
"many": 44352
}
},
"median": {
"t": {
"start": 17571,
"mid": 18062,
"end": 16974,
"double": 20874,
"many": 41171.5
},
"c": {
"start": 16893.5,
"mid": 18213,
"end": 17016.5,
"double": 20771,
"many": 38849
}
}
}
0 là giá trị tối thiểu và tối đa của một lần chạy tương ứng.