- Siêu lớp và danh mục iOS/Objective-C
- object-c - -1001 lỗi khi NSURLSession vượt qua httpproxy và /etc/hosts
- java - Nhận địa chỉ url bằng lớp mạng
- ios - Âm thanh không phát trong thông báo đẩy
Tôi đang viết một thuật toán thực hiện một vòng lặp lớn trên một mảng các số nguyên từ đầu đến cuối, chứa điều kiện if. Vòng lặp có thể kết thúc khi điều kiện sai lần đầu tiên.
Vì vậy, đối với vòng lặp for, nếu điều kiện sai, nó sẽ tiếp tục lặp lại và thực hiện các thay đổi biến đơn giản. Với vòng lặp while sử dụng một điều kiện làm tham số while, khi điều kiện trở thành sai, vòng lặp sẽ dừng và một số lần lặp sẽ được lưu lại.
Tuy nhiên, vòng lặp while vẫn chậm hơn một chút so với vòng lặp for!
Tuy nhiên, nếu tôi sử dụng giá trị int làm bộ đếm và đếm số lần lặp, vòng lặp For sẽ thực hiện nhiều lần lặp hơn như mong đợi. Tuy nhiên, lần này, thời gian thực hiện của phương thức For đã sửa đổi có bộ đếm sẽ chậm hơn nhiều so với phương thức while có bộ đếm!
Có lời giải thích nào không?
Đây là mã có vòng lặp for:
for (int i = pair.length - 1; i >= 0; i -= 2) {
//cpt++;
u = cặp[i];
v = cặp[i - 1];
duv = bfsResult.distanceMatrix.getDistance(u, v);
nếu (duv > delta) {
thực thi();
}
}
Thời gian thực hiện: 6473
Sử dụng thời gian thực hiện bộ đếm: 8299
Số lần lặp: 2584401
Đây là mã cho vòng lặp while:
int i = pair.length - 1;
u = cặp[i];
v = cặp[i - 1];
duv = bfsResult.distanceMatrix.getDistance(u, v);
trong khi (duv > delta) {
//cpt++;
thực thi();
u = cặp[i -= 2];
v = cặp[i - 1];
duv = bfsResult.distanceMatrix.getDistance(u, v);
}
Thời gian thực hiện: 6632
Thời gian thực hiện sử dụng bộ đếm: 7163
Số lần lặp: 9793
Thời gian tính bằng mili giây, tôi lặp lại thử nghiệm nhiều lần với các trường hợp có kích thước khác nhau và các thước đo gần như giữ nguyên. Phương thức exec() cập nhật giá trị gia tăng. Phương thức getDistance() chỉ truy cập vào ma trận int[][].
Cảm ơn sự giúp đỡ của bạn.
câu trả lời hay nhất
Trước khi bạn thử thực hiện bất kỳ thử nghiệm hiệu năng nào trên Java, tôi thực sự khuyên bạn nên đọc bài viết này http://www.ibm.com/developerworks/java/library/j-benchmark1/index.html
Tóm lại - sau khi chạy một thời gian, JVM hỗ trợ Hotspot có thể tối ưu hóa mã của bạn, điều này sẽ ảnh hưởng đến kết quả kiểm tra. Do đó, bạn cần các kỹ thuật thích hợp để kiểm tra hiệu suất mã của mình. Để giảm bớt nỗi đau, có một thư viện để thực hiện các bài kiểm tra thích hợp:http://ellipticgroup.com/html/benchmarkingArticle.htmlBạn có thể tìm thấy các liên kết đến cả hai phần của bài viết trên trang này.
Cập nhật: Để giúp bạn bắt đầu nhanh hơn, đây là những gì bạn cần làm:
System.out.println(Điểm chuẩn mới(New WhileApproach()));
Hiển thị thời gian thực hiện của vòng lặp while rõ ràng
System.out.println(Điểm chuẩn mới(ForApproach()) mới);
Nhận thông tin về vòng lặp for
Về Java For Loop và While Loop, hành vi lạ và hiệu suất định thời gian, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/8183143/
Tôi đang gặp phải hành vi kỳ lạ này do tính năng tự động hoàn thành của bản đồ Google (hoặc có thể tôi đang thiếu thứ gì đó)... Bạn có suy nghĩ gì không? Điều kỳ lạ: Bạn nhập nội dung nào đó vào đầu vào, ví dụ "London" Bạn nhấn [ENTER] Bạn nhấn nút [CLEAR] Bạn nhấp vào 'Enter'
Mã này hoàn toàn giống với mã trong sách "Học Java" (Oracle Press Books), nhưng nó không hoạt động. Tôi không hiểu tại sao nó không hoạt động, nó nên như vậy. Tôi sử dụng OpenJDK và Sun JDK 7
Chính xác thì điều gì đã xảy ra trong Ví dụ 1? Điều này được phân tích như thế nào? # không phân tách trên , [String]::Join(",",("aaaaa,aaaaa,aaaaa,aaaaa,aaaaa,aa
Tôi cần giải hệ phương trình. Để làm điều này tôi sử dụng hàm sgesv_(). Mọi thứ đều hoạt động tốt và nó mang lại cho tôi cảm giác về kết quả chính xác của giải pháp. Nhưng tôi nhận được một cảnh báo kỳ lạ. Cảnh báo: Truyền đối số 3 của 'sgesv_' từ loại con trỏ không tương thích mà tôi nhận được
Tôi hiện đang gặp phải sự cố lạ khi hoạt ảnh: [UIView animateWithDuration:3 delay:0
cảnh báo ('hoạt động'); $(window).load(function () { cảnh báo ('không hoạt động'); });
Mã của tôi: public class MyTest { public class StringSorter triển khai Comparator { public
Tôi đang học JavaScript. Cố gắng hiểu mã, function foo (){ var a = b = {name: 'Hai'}; document.write(a.name +''
Câu hỏi này khó có thể giúp ích cho bất kỳ khách truy cập nào trong tương lai; nó chỉ liên quan đến một khu vực địa lý nhỏ, một thời điểm cụ thể hoặc một tình huống rất hẹp thường không áp dụng cho khán giả Internet toàn cầu. Để giúp làm cho câu hỏi này được áp dụng rộng rãi hơn, hãy truy cập
Điều này hoạt động như mong đợi: [dgorur@ted ~]$ env -i env [dgorur@ted ~]$ Điều này thực hiện: [dgorur@ted ~]$ env -i which date which: no
struct BLA { int size_; int size()const{ return size_; } } int x b[ 2 ];
Tôi có đoạn mã sau: #test img {vertical-align: middle;} div#test { border: 1px màu xanh lục đậm: 150px;
Tôi nghĩ hầu hết những người đã sử dụng C/C++ đều có trực giác (ít nhiều) về cách hoạt động của bộ tiền xử lý. Đó là điều tôi vẫn nghĩ cho đến ngày nay, nhưng hóa ra trực giác của tôi đã sai. Đây là câu chuyện: Hôm nay tôi đã thử một điều gì đó và tôi không thể giải thích được kết quả. xem xét đầu tiên
Tôi muốn tạo mô phỏng cho TnSettings, vâng, nó sẽ hoạt động nếu tôi viết mã theo phương pháp sau, vấn đề là chúng ta cần viết mã mô phỏng cho từng trường hợp, nếu chúng ta chỉ mô phỏng một lần và sau đó thực thi nhiều trường hợp thì trường hợp thứ hai sẽ Báo cáo ngoại lệ
Có hai cấu trúc sau trong dự án của tôi typedef dễ bay hơi struct { unsigned char rx_buf[MAX_UART_BUF] // Bộ đệm đầu vào trên U;
Regex rx = new Regex(@"[+-]"); chuỗi[] substrings = rx.Split(biểu thức = "-9a3dcb);
Tôi đang gặp sự cố lạ với hai ứng dụng của mình. Đây là thiết lập: hai ứng dụng tomcat/java, chạy trên cùng một mạng, được kết nối với cùng một MS-SQL-Server. Một ứng dụng nằm trong DMZ có thể được truy cập từ Internet
Tôi hiện đang gặp khó khăn với OnLongClickListener trên Android Api Lvl 8. Lấy mã này: this.webView.setOnLongClickListener(new
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况相关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visit
Vừa gặp chuyện lạ. Tôi có đoạn mã sau: -(void)ImageDownloadCompleat { [self performanceSelectorOnMainThread:@selector(up
Tôi là một lập trình viên xuất sắc, rất giỏi!