Tôi đang đọc tệp và tôi đã đọc một hàng dữ liệu (1600 lần đọc tuần tự là 17 byte) hoặc cột dữ liệu (1600 lần đọc 17 byte cách nhau 1600 * 17 = 27.200 byte). Tệp này nằm trên ổ đĩa cục bộ hoặc ổ đĩa từ xa. Tôi đọc 10 lần vì vậy tôi mong đợi trong mỗi trường hợp để đọc trong 272.000 byte dữ liệu.Đọc tệp qua mạng chậm do đọc thêm
Trên ổ đĩa cục bộ, tôi thấy những gì tôi mong đợi. Trên ổ đĩa từ xa khi đọc tuần tự, tôi cũng thấy những gì tôi mong đợi nhưng khi đọc một cột, tôi thấy một tấn đọc bổ sung đang được thực hiện. Chúng dài 32.768 byte và dường như không được sử dụng nhưng chúng làm cho số lượng dữ liệu được đọc nhảy từ 272.000 byte đến bất cứ nơi nào từ 79 MB đến 106 MB. Đây là kết quả sử dụng Process Monitor:
1:39:39.4624488 PM DiskSpeedTest.exe 89628 ReadFile \\BCCDC01\BCC-raid3\SeisWareInc Temp Dir\BPepers_Temp\Projects\PT_4\Horizons\BaseName3D_1\RR_AP SUCCESS Offset: 9,390,069, Length: 17 1:39:39.4624639 PM DiskSpeedTest.exe 89628 FASTIO_CHECK_IF_POSSIBLE \\BCCDC01\BCC-raid3\SeisWareInc Temp Dir\BPepers_Temp\Projects\PT_4\Horizons\BaseName3D_1\RR_AP SUCCESS Operation: Read, Offset: 9,390,069, Length: 17 1:39:39.4624838 PM DiskSpeedTest.exe 89628 ReadFile \\BCCDC01\BCC-raid3\SeisWareInc Temp Dir\BPepers_Temp\Projects\PT_4\Horizons\BaseName3D_1\RR_AP SUCCESS Offset: 9,388,032, Length: 32,768, I/O Flags: Non-cached, Paging I/O, Synchronous Paging I/O, Priority: Normal 1:39:39.4633839 PM DiskSpeedTest.exe 89628 ReadFile \\BCCDC01\BCC-raid3\SeisWareInc Temp Dir\BPepers_Temp\Projects\PT_4\Horizons\BaseName3D_1\RR_AP SUCCESS Offset: 9,417,269, Length: 17 1:39:39.4634002 PM DiskSpeedTest.exe 89628 FASTIO_CHECK_IF_POSSIBLE \\BCCDC01\BCC-raid3\SeisWareInc Temp Dir\BPepers_Temp\Projects\PT_4\Horizons\BaseName3D_1\RR_AP SUCCESS Operation: Read, Offset: 9,417,269, Length: 17 1:39:39.4634178 PM DiskSpeedTest.exe 89628 ReadFile \\BCCDC01\BCC-raid3\SeisWareInc Temp Dir\BPepers_Temp\Projects\PT_4\Horizons\BaseName3D_1\RR_AP SUCCESS Offset: 9,444,469, Length: 17 1:39:39.4634324 PM DiskSpeedTest.exe 89628 FASTIO_CHECK_IF_POSSIBLE \\BCCDC01\BCC-raid3\SeisWareInc Temp Dir\BPepers_Temp\Projects\PT_4\Horizons\BaseName3D_1\RR_AP SUCCESS Operation: Read, Offset: 9,444,469, Length: 17 1:39:39.4634529 PM DiskSpeedTest.exe 89628 ReadFile \\BCCDC01\BCC-raid3\SeisWareInc Temp Dir\BPepers_Temp\Projects\PT_4\Horizons\BaseName3D_1\RR_AP SUCCESS Offset: 9,441,280, Length: 32,768, I/O Flags: Non-cached, Paging I/O, Synchronous Paging I/O, Priority: Normal 1:39:39.4642199 PM DiskSpeedTest.exe 89628 ReadFile \\BCCDC01\BCC-raid3\SeisWareInc Temp Dir\BPepers_Temp\Projects\PT_4\Horizons\BaseName3D_1\RR_AP SUCCESS Offset: 9,471,669, Length: 17 1:39:39.4642396 PM DiskSpeedTest.exe 89628 FASTIO_CHECK_IF_POSSIBLE \\BCCDC01\BCC-raid3\SeisWareInc Temp Dir\BPepers_Temp\Projects\PT_4\Horizons\BaseName3D_1\RR_AP SUCCESS Operation: Read, Offset: 9,471,669, Length: 17 1:39:39.4642582 PM DiskSpeedTest.exe 89628 ReadFile \\BCCDC01\BCC-raid3\SeisWareInc Temp Dir\BPepers_Temp\Projects\PT_4\Horizons\BaseName3D_1\RR_AP SUCCESS Offset: 9,498,869, Length: 17 1:39:39.4642764 PM DiskSpeedTest.exe 89628 FASTIO_CHECK_IF_POSSIBLE \\BCCDC01\BCC-raid3\SeisWareInc Temp Dir\BPepers_Temp\Projects\PT_4\Horizons\BaseName3D_1\RR_AP SUCCESS Operation: Read, Offset: 9,498,869, Length: 17 1:39:39.4642922 PM DiskSpeedTest.exe 89628 ReadFile \\BCCDC01\BCC-raid3\SeisWareInc Temp Dir\BPepers_Temp\Projects\PT_4\Horizons\BaseName3D_1\RR_AP SUCCESS Offset: 9,498,624, Length: 32,768, I/O Flags: Non-cached, Paging I/O, Synchronous Paging I/O, Priority: Normal
Thông báo các phụ đọc của 32.768 với I/O Flags thiết lập để không lưu trữ, Paging I/O, đồng bộ Paging I/O, ưu tiên: Bình thường. Những đọc thêm là những gì mang nó từ 272 KB đến 106 MB và đang gây ra sự chậm chạp. Họ không xảy ra khi đọc từ một tập tin địa phương hoặc nếu tôi đang đọc một hàng để nó tất cả tuần tự.
Tôi đã thử đặt FILE_FLAG_RANDOM_ACCESS nhưng dường như điều này không có tác dụng. Bất kỳ ý tưởng về những gì đang gây ra những lần đọc thêm và làm thế nào để làm cho họ dừng lại?
Các thử nghiệm đang được chạy trên hệ thống 64 bit của Vista. Tôi có thể cung cấp mã nguồn cho một chương trình để chứng minh vấn đề cũng như một chương trình điều khiển thực hiện các bài kiểm tra.
Có thể bạn có thể dán phần mã mà bạn đọc. Điều đó sẽ loại trừ một số lỗi mã hóa, vốn phổ biến hơn lỗi nền tảng :-) – Ariel