Đúng.
Pplu tự hỏi tại sao các chương trình chạy chậm hơn khi hệ thống đang chạy với nhiều màn hình .
Tất nhiên, đối với một điều, tất nhiên, khi bạn có nhiều hơn một màn hình, sẽ có nhiều thứ hơn trên màn hình để hệ thống theo dõi. Đó là cùng một lý do mà các chương trình chạy chậm hơn trên một màn hình lớn hơn là trên một màn hình nhỏ.
Và nếu chỉ có một màn hình, thì các chức năng như MonitorFromPoint
trở nên tầm thường nếu cờ giống như vậy
MONITOR_DEFAULTTONEAREST
, bởi vì khi chỉ có một màn hình, trả lời các câu hỏi như "Màn hình nào gần điểm này nhất"? trở nên rất dễ dàng
Nếu hai màn hình của bạn không cùng kích thước, thì sự kết hợp của hai màn hình sẽ không phải là hình chữ nhật, điều này làm cho việc chống lại sự kết hợp của tất cả các màn hình trở nên phức tạp hơn.
Nhưng tôi nghi ngờ hình phạt lớn cho nhiều màn hình sẽ xảy ra nếu bạn phạm sai lầm khi đặt màn hình của mình thành các định dạng màu khác nhau, ví dụ, nếu bạn đặt một màn hình thành định dạng 565 và đặt một màn hình khác thành 24bpp.
Nếu hai màn hình không sử dụng cùng định dạng màu, thì các chương trình sẽ buộc phải sử dụng DIB thay vì DDB cho ảnh bitmap màn hình, trong trường hợp cửa sổ được chuyển sang cửa sổ có định dạng màu khác (hoặc tệ hơn, được định vị sao cho nó nằm ngang hai màn hình với các định dạng màu khác nhau). Về nguyên tắc, các chương trình chỉ cần sử dụng DIB "trường hợp xấu nhất"; ví dụ: nếu một màn hình là 555 và màn hình kia là 565, thì một DIB 565 sẽ đủ. Tuy nhiên, trên thực tế, hầu hết các chương trình chỉ rơi vào DIB 24bpp hoặc 32bpp khi phải đối mặt với màn hình với các định dạng màu khác nhau.
(Bạn truy vấn xem tất cả các màn hình có cùng định dạng màu hay không bằng cách gọi
GetSystemMetrics(SM_SAMEDISPLAYFORMAT)
.)
Do quá trình chuyển đổi định dạng diễn ra khi DIB được chuyển sang thiết bị có định dạng màu khác, buộc chương trình phải giữ lại bitmap của nó vì DIB có nghĩa là ít nhất một trong số các màn hình (và có thể cả hai), bạn sẽ trải qua chuyển đổi định dạng khi DIB đó được vẽ lên màn hình. Ngoài ra còn có một vài tối ưu hóa linh tinh bị vô hiệu hóa khi không phải tất cả các màn hình của bạn đều sử dụng cùng định dạng màu vì chi phí sử dụng DIB vượt xa mức tiết kiệm từ tối ưu hóa.
Vì vậy, nếu bạn chưa có, hãy đi vào cài đặt hiển thị của bạn và kiểm tra xem bạn đã đặt tất cả màn hình của mình ở cùng độ sâu màu chưa. Nếu bạn không làm điều này, thì một lớp lớn tối ưu hóa đồ họa sẽ bị mất.