Tôi chạy một profiler (rất buồn ngủ) trên chương trình của tôi và nó cho thấy một tỷ lệ cao trên chức năng thiết lập lại của tôi (chức năng thiết lập lại chạy mỗi khung hình). Các chương trình trông như thế này:vector :: clear() tốn quá nhiều thời gian?
Init Mục:
std::vector<std::vector<int>> VecOfVecOfPath;
VecOfVecOfPath.resize(20);
for(int i=0; i<20; i++) VecOfVecOfPath.reserve(640);
VecOfVecOfPath là một loạt các con đường được tìm thấy bởi các chức năng khác. VecOfVecOfPath [i] sẽ được điền trong khi thực hiện, mỗi khung hình. Ví dụ: Đó là push_back
-ed bởi các chức năng khác và đặt lại trước khi sử dụng, mỗi khung hình.
Chức năng reset:
void Reset()
{
for(int i=0; i<20; i++) VecOfVecOfPath[i].clear();
}
Vì vậy, các thiết lập lại rất đơn giản, nhưng nó có một thứ hạng khá cao trong hồ sơ.
Điều này có phổ biến không? Liệu vector :: clear() có các chi phí như vậy ngay cả đối với các vector kiểu dựng sẵn không?
Cảm ơn!
Tôi đã thử xây dựng chương trình ở chế độ Phát hành và sau đó chi phí giảm xuống gần như bằng không. Từ 12 ~ 13% đến 0,03 ~ 0,04%.
Sau đó, tôi đã đi đến mã nguồn và có định nghĩa như ITERATOR_DEBUG_LEVEL thực hiện các hoạt động bổ sung trong chế độ Gỡ lỗi.
Vì vậy, nó giống như @ noggin182 được đề xuất, mọi thứ khác nhau ở chế độ Gỡ lỗi và Phát hành.
Trích: "meke chắn rằng bạn đang profiling trong phiên bản xây dựng và tìm kiếm để xem nếu có bất kỳ tiền xử lý có điều kiện xác định bạn thiết lập để tăng hiệu suất - noggin182 03 tháng 1 tại 15:32."
Bạn có cho rằng bạn đang gọi ‘clear' không cần thiết? –
@parapurarajkumar - điều đầu tiên cũng xảy ra với tôi. Tôi nghĩ chúng ta cần biết thêm chi tiết về việc sử dụng 'VecOfVec' - có lẽ các Vec có thể được tái chế để tránh sự rõ ràng. –
vectơ của vectơ về cái gì? –