Tôi thực sự đã giải quyết được điều này, nhưng tôi sẽ đăng nó cho hậu thế.
Tôi đã gặp phải một vấn đề rất kỳ lạ với DataGridView trên hệ thống màn hình kép của mình. Vấn đề tự biểu hiện dưới dạng sơn lại điều khiển CỰC KỲ chậm ( như 30 giây để sơn lại toàn bộ ), nhưng chỉ khi nó ở trên một trong các màn hình của tôi. Khi khác, tốc độ sơn lại là ổn.
Tôi có Nvidia 8800 GT với trình điều khiển không phải beta mới nhất (175. gì đó). Nó có phải là một lỗi trình điều khiển? Tôi sẽ để điều đó trong không khí, vì tôi phải sống với cấu hình cụ thể này. (Tuy nhiên, nó không xảy ra trên thẻ ATI ...)
Tốc độ sơn không liên quan gì đến nội dung ô và việc vẽ tùy chỉnh không cải thiện hiệu suất chút nào - ngay cả khi chỉ sơn một hình chữ nhật liền khối.
Sau đó, tôi phát hiện ra rằng việc đặt một ElementHost (từ không gian tên System.Windows.Forms.Integration) trên biểu mẫu sẽ khắc phục được sự cố. Nó không phải bị rối với; nó chỉ cần là con của dạng DataGridView cũng có trên. Nó có thể được thay đổi kích thước thành (0, 0) miễn là thuộc tính Visible là đúng.
Tôi không muốn thêm phụ thuộc .NET 3 / 3.5 vào ứng dụng của mình một cách rõ ràng; Tôi thực hiện một phương pháp để tạo điều khiển này trong thời gian chạy (nếu có thể) bằng cách sử dụng phản chiếu. Nó hoạt động, và ít nhất nó không thành công trên các máy không có thư viện yêu cầu - nó chỉ trở lại chậm chạp.
Phương pháp này cũng cho phép tôi áp dụng để sửa khi ứng dụng đang chạy, giúp dễ dàng xem các thư viện WPF đang thay đổi gì trên biểu mẫu của tôi (sử dụng Spy ++).
Sau rất nhiều lần thử và sai, tôi nhận thấy rằng việc bật bộ đệm kép trên chính điều khiển (trái ngược với chỉ biểu mẫu) sẽ khắc phục được sự cố!
Vì vậy, bạn chỉ cần tạo một lớp tùy chỉnh dựa trên DataGridView để có thể kích hoạt DoubleBuffering của nó. Đó là nó!
class CustomDataGridView: DataGridView
{
public CustomDataGridView()
{
DoubleBuffered = true;
}
}
Miễn là tất cả các phiên bản lưới của tôi đang sử dụng phiên bản tùy chỉnh này, tất cả đều ổn. Nếu tôi từng gặp phải trường hợp do điều này gây ra khi tôi không thể sử dụng giải pháp lớp con (nếu tôi không có mã), tôi cho rằng tôi có thể thử đưa điều khiển đó vào biểu mẫu :) ( mặc dù tôi ' Sẽ có nhiều khả năng thử sử dụng phản xạ để buộc thuộc tính DoubleBuffered từ bên ngoài vào để một lần nữa tránh sự phụ thuộc ).
Thật đáng buồn khi một thứ đơn giản tầm thường như vậy đã ăn hết thời gian của tôi ...