2010-08-26 34 views
8

thể trùng lặp:
How to invalidate the file system cache?Làm cách nào để xóa bộ nhớ đệm trên đĩa trong Windows?

Để có thể vì vậy một số tiêu chuẩn tôi cần phải dọn dẹp Windows đĩa đọc cache. Tôi có thể làm cái này như thế nào? Trong thực tế, tôi muốn so sánh nếu tải một tập tin Unicode lớn (UTF-8 hoặc UTF-16) từ đĩa nhanh hơn hay không, xem xét trong bộ nhớ, tôi giữ UTF-16.

Tôi biết rằng nó không có sự khác biệt đáng kể nhưng để chuẩn nó tôi cần phải chắc chắn rằng tập tin đó không được lưu trữ - Tôi cần xem kích thước trên đĩa có tác động nhiều hay ít hơn là giải mã tệp.

+0

Điều bạn đang tìm kiếm còn được gọi là "xóa bộ nhớ cache". Trong Linux, bạn có thể thực hiện nó bằng cách viết thư cho '/ proc/sys/vm/drop_caches'. Không có ý tưởng về Windows mặc dù ... – sleske

+0

@ Mehrdad bạn đã nhận ra rằng câu hỏi này nếu từ năm 2010 và một trong những từ năm 2011? – Jack

+0

@Jack: Vâng, xin lỗi, thực sự tôi đã làm, nhưng đồng thời, tôi sẽ trả lời câu hỏi này cho câu hỏi khác cách đây nhiều tháng ... nên câu hỏi đó phải được đóng lại như một phần của câu hỏi này, Hoặc cách khác xung quanh.Tôi quyết định lựa chọn thứ hai vì tôi thấy * tấn * bản sao của câu hỏi này (nhiều người từ năm 2010) khi tôi Googled, và nghĩ rằng sẽ ít rắc rối hơn nếu đánh dấu tất cả chúng như một sự lừa dối của điều đó hơn là thử để tìm bản sao sớm nhất của câu hỏi này trên StackOverflow (có tấn). : \ Xin lỗi .. – Mehrdad

Trả lời

3

AFAIK, nó tiếc là không thể loại bỏ các đọc bộ nhớ cache trong môi trường Windows. Tôi đã dành thời gian xem xét điều này một vài năm trước đây và chỉ tìm ra cách để tuôn ra các ghi bộ nhớ cache.

Như tôi đã nhìn thấy nó, bạn có ba tùy chọn, trừ khi ai đó đã tìm thấy một số ma thuật:

  1. Nếu có thể, làm tập đọc của bạn I/O trong chế độ không có bộ đệm. Mỗi lần bạn muốn chuẩn, tạo một bản sao mới của dữ liệu kiểm tra xác định chế độ không được tạo ra khi tạo bản sao mới (này cần giữ bản sao ra khỏi bộ nhớ cache đã đọc, nhưng tôi chưa thử nghiệm).
  2. Phân bổ đủ bộ nhớ mà cửa sổ phải loại bỏ bộ nhớ cache đĩa (ugh!).

EDIT: thực sự có thể xóa bộ nhớ cache đã đọc, ít nhất là trên Vista và sau đó: Disable or flush page cache on Windows. Nó đòi hỏi một cuộc gọi đến các API không có giấy tờ NtSetSystemInformation không có giấy tờ, mặc dù. Ngoài ra, đối với một tệp duy nhất, bộ nhớ cache đọc có thể bị xóa chỉ đơn giản bằng cách mở tệp bằng FILE_FLAG_NO_BUFFERING được chỉ định và đóng lại xử lý.

+1

Lưu ý rằng chương trình 'flushmem' từ câu trả lời của Sron Sbarnea thực hiện giải pháp 3. Nó hoạt động, nhưng phân bổ bộ nhớ đó dường như khá chậm (có lẽ vì nó gây ra rất nhiều phân trang/hoán đổi). – sleske

+1

@sleske: vâng, nó không phải là một giải pháp khá - nó buộc Windows cắt các bộ làm việc cho tất cả các quy trình, làm trang để hoán đổi ... và sau đó thường sẽ có hoạt động pagein sau đó. – snemarch

+1

'Lưu ý rằng chương trình flushmem từ câu trả lời của Sron Sbarnea thực hiện giải pháp 3. Nó hoạt động, nhưng phân bổ nhiều bộ nhớ có vẻ khá chậm (có thể vì nó gây ra rất nhiều phân trang/hoán đổi) .' Chưa kể nó có thể làm hỏng công cụ. Tôi chạy nó và Chrome (bao gồm cả trang này) chỉ biến mất. Doh! May mắn thay khi tôi chạy Chrome, nó cho phép tôi khôi phục phiên của tôi, vì vậy nó chỉ là một sự bất tiện nhỏ; Tuy nhiên, được khuyên là an toàn, bạn nên thoát khỏi mọi thứ trước khi sử dụng nó (mà tất nhiên làm cho nó một giải pháp nghèo). ': - /' – Synetech

3

Một người nào đó từ Microsoft đã giúp tôi thực hiện điều này một vài năm trước (trở lại trong những ngày của Windows XP) và đã cho tôi một giải pháp đáp ứng nhu cầu của tôi vào thời điểm đó. Tôi đã có hai ổ đĩa trong máy, và những gì tôi cần để kiểm tra đã có trên ổ đĩa D, và may mắn thay tôi không cần phải giữ bất kỳ tệp nào mở trên ổ đĩa D khi tôi muốn xóa bộ nhớ cache. Từ giao diện Windows Disk Management, tôi có thể thay đổi ký tự ổ đĩa D: thành một chữ cái khác, và sau đó quay trở lại, và ổ D sẽ thực hiện như thể có một bộ nhớ cache lạnh trong hệ điều hành.

Các vấn đề liên quan