Tôi liên tục trong một tình huống tương tự mặc dù tôi không bao giờ nhận được chính xác thông điệp đó, và đã thực hiện một chút thử nghiệm xung quanh.
Theo hiểu biết của tôi, tài nguyên cốt lõi đang bị căng thẳng ở đây, là bộ nhớ GPU . Nhưng điều này không nhất thiết chỉ ra rằng bạn đang sử dụng hết tài nguyên này nói chung. Điều đó có thể có nghĩa là Trình quản lý cửa sổ màn hình đã phát hiện ra rằng bạn đang chạy quá thấp đến nỗi một tính năng cụ thể của dịch vụ này có thể bị vô hiệu hóa để giải phóng thêm bộ nhớ.
Để kiểm tra điều này, tôi bắt đầu mở các ứng dụng cần nhiều bộ nhớ GPU:
Đây là phần nào sử dụng trên mức trung bình trên thiết lập ba màn hình của tôi với một vài trình phát chính đang chạy (Visual Studio 2012 (bật tăng tốc phần cứng), PhpStorm, Aptana Studio, Chrome, Firefox, IE, ...). Vì vậy, yeah, nếu bạn chỉ có thẻ 1 GB và đây sẽ là tình huống sử dụng thông thường của bạn, bạn đã gặp vấn đề.
Tôi đã phải đẩy xa hơn một chút và bắt đầu thêm một vài trường hợp Visual Studio ...
... cho đến khi nó đạt gần 1,5 GB và ...
SNAP! Điều này khiến Windows giết chết hoàn toàn tổng hợp máy tính để bàn (và giải phóng một số tài nguyên quý giá).
Bây giờ, khi tôi đã ở mức quan trọng và tôi bắt đầu một ứng dụng sử dụng quá nhiều bộ nhớ GPU trong toàn màn hình , tôi thậm chí có thể vượt quá giới hạn tới hạn này. Đây là kết quả sau khi chạy Black Mesa một lúc trên 2560x1440 với chi tiết tối đa:
Vì vậy, hai điều có thể được khấu trừ từ điều này. Mặc dù vượt quá 75% trên máy tính để bàn có thể buộc Windows vô hiệu hóa thành phần máy tính để bàn, nhưng khi đạt đến giới hạn tương tự trong một ứng dụng toàn màn hình (và, tùy ý thoát khỏi ứng dụng đó) thì thành phần máy tính để bàn không bị tắt.
Điều thứ hai là, trong khi bạn tham gia trò chơi của mình, bạn có thể có ý tưởng "Này, tôi có đủ tài nguyên để chạy trò chơi này, tại sao tôi không có đủ tài nguyên cho máy tính để bàn?". Lý do là, cả hai đều yêu cầu bộ nhớ cùng một lúc.
Windows chỉ có thể cho bạn biết về tình trạng bộ nhớ sau khi bạn thoát khỏi trò chơi. Vì vậy, khi tôi bắt đầu một Visual Studio khác sau khi thoát Black Mesa ...
Vậy chúng ta có thể làm gì?
Nhận thêm bộ nhớ GPU
Ngọt ngào và đơn giản.
Vô hiệu hóa Thành phần máy tính để bàn (mỗi quy trình)
Như đã được đề xuất, bạn có thể vô hiệu hóa thành phần máy tính để bàn cho một lần thực thi. Điều này có tác dụng là thành phần máy tính để bàn tạm thời bị vô hiệu hóa trong khi thực thi đang được thực thi. Điều này làm giảm đáng kể mức tiêu thụ bộ nhớ chung trong khi ứng dụng được thực thi trong các thử nghiệm của tôi:
Thông báo tiền thưởng đề cập rằng điều này là không mong muốn, vì điều này có khả năng rất nhiều công việc.
Vô hiệu hóa Thành phần máy tính để bàn (trên toàn cầu)
Tôi sẽ không coi đây là một giải pháp vì thành phần máy tính để bàn thường được mong muốn. Nhưng đây là nơi để vô hiệu hóa nó:
Tôi chỉ muốn thoát khỏi tin nhắn phiền phức!
Chỉ vì bạn xóa cảnh báo " Pin của bạn sắp hết! Bạn chỉ có thể nói chuyện thêm 10 phút nữa! " Không có nghĩa là bạn có thể nói chuyện lâu hơn 10 phút. Trên thực tế, điện thoại của bạn rất có thể sẽ tắt và đó là điện thoại. Bây giờ làm thế nào để cải thiện?
Tôi chưa bao giờ cho rằng tin nhắn có thể bị tắt và tôi không thấy làm thế nào có thể được coi là một lợi ích.
Bạn có thể nghĩ rằng bạn biết rõ hơn, nhưng bạn thì không. Nếu hệ thống báo cho bạn biết nó đang cạn kiệt tài nguyên, thì đúng là như vậy.
Nhưng nó không phải là! Tôi biết!
Ok, giả sử Windows không đủ thông minh để phát hiện tình huống đặc biệt mà bạn gặp phải và thông báo cảnh báo đơn giản là một sự bất tiện gây phiền nhiễu. Gì bây giờ?
Vấn đề là, cá nhân tôi, tôi cũng bị ảnh hưởng bởi điều này và điều đó làm tôi khó chịu. Bởi vì tôi thậm chí không nhận được tin nhắn cảnh báo đó. Windows chỉ cần chuyển cấu hình màu của tôi và đó là nó. Và tôi thích điều đó thực sự.
Khi nó xảy ra, tôi thường nhanh chóng chạy một kịch bản gọi
net stop uxsms & net start uxsms
Đây là kịch bản đầy đủ. Nó sẽ bật mở một dấu nhắc UAC và khởi động lại dịch vụ để nó có thể được kích hoạt từ bất cứ đâu. Tôi đã ghim nó vào menu bắt đầu.
@if (1==1) @if(1==0) @ELSE
@echo off&SETLOCAL ENABLEEXTENSIONS
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"||(
cscript //E:JScript //nologo "%~f0"
@goto :EOF
)
NET STOP uxsms
NET START uxsms
@goto :EOF
@end @ELSE
ShA=new ActiveXObject("Shell.Application")
ShA.ShellExecute("cmd.exe","/c \""+WScript.ScriptFullName+"\"","","runas",5);
@end
Việc này khởi động lại Trình quản lý cửa sổ máy tính để bàn và đưa tôi trở lại máy tính để bàn tổng hợp của mình (và nó giải phóng rất nhiều tài nguyên trong quy trình, yay).
Biết được điều này, bạn cũng có thể xây dựng cho mình một môi trường chơi trò chơi đặc biệt nơi bạn dừng dịch vụ trước khi bắt đầu trò chơi để chống lại toàn bộ hành vi này. Tuy nhiên, điều này sẽ gây ra hành vi giống hệt nhau để vô hiệu hóa thành phần máy tính để bàn cho một lần thực thi thông qua các thuộc tính tệp.