{"id":863,"date":"2026-10-18T03:00:00","date_gmt":"2026-10-18T03:00:00","guid":{"rendered":"https:\/\/vpslake.com\/blog\/?p=863"},"modified":"2026-10-18T03:00:00","modified_gmt":"2026-10-18T03:00:00","slug":"improving-rdp-performance-windows-server","status":"publish","type":"post","link":"https:\/\/vpslake.com\/blog\/2026\/10\/18\/improving-rdp-performance-windows-server\/","title":{"rendered":"How to Improve RDP Performance on Windows Server"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Improve RDP performance on Windows Server by tuning the client, preserving the faster UDP transport when the network supports it, and removing unnecessary visual effects. The changes take about 10 minutes and give you a repeatable way to tell whether the bottleneck is the connection, the server, or the RDP session itself.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Prerequisites<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>A Windows Server 2016, 2019, 2022, or 2025 VPS running Desktop Experience. The menu names below apply to supported releases, although a domain policy can override local settings.<\/li>\n\n\n<li>An administrator account over RDP, plus VPS console access in case a policy change interrupts your session.<\/li>\n\n\n<li>A Windows 10 or Windows 11 computer with the built-in Remote Desktop Connection client (<code>mstsc.exe<\/code>).<\/li>\n\n\n<li>A stable connection with low packet loss. Microsoft\u2019s general guidance is about 5 Mbps for one 1920 \u00d7 1080 session at 30 frames per second; high-motion work needs more.<\/li>\n\n\n<li>A <a href=\"https:\/\/vpslake.com\/buy-windows-rdp\">VPSLake Windows RDP server<\/a> if you need a Windows host for remote desktop work.<\/li>\n\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Step 1: Measure the connection and server first<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">You need a baseline so you can separate network lag from a CPU, memory, or disk bottleneck.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">From your local Windows computer, replace <code>SERVER_IP<\/code> with the public address of the VPS:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ping.exe -n 20 SERVER_IP\nTest-NetConnection -ComputerName SERVER_IP -Port 3389<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The first command should show consistent times and, ideally, <code>Lost = 0 (0% loss)<\/code>. The second should end with <code>TcpTestSucceeded : True<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>TcpTestSucceeded : True<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ping is only a diagnostic; some providers block ICMP even when RDP works. If the test shows packet loss or very uneven latency, fix the network path before changing graphics settings.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Inside the server session, open <strong>Task Manager \u2192 Performance<\/strong> and watch CPU, Memory, Disk, and Ethernet while reproducing the lag. A busy disk, nearly full memory, or sustained CPU usage above about 90 percent points to a server workload rather than an RDP display setting.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 2: Reduce expensive work in the RDP client<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The client controls resolution, redirected devices, and several effects that consume bandwidth on every screen update.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">On the computer you use to connect, press <code>Windows key + R<\/code>, run the command below, and select <strong>Show Options<\/strong>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mstsc.exe<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Use these settings on the <strong>Display<\/strong> and <strong>Experience<\/strong> tabs:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n\n<li>On <strong>Display<\/strong>, start with a single monitor and a lower resolution such as 1920 \u00d7 1080 or 1280 \u00d7 720. Higher resolutions and multiple monitors create more pixels to encode and transmit.<\/li>\n\n\n<li>On <strong>Experience<\/strong>, leave <strong>Detect connection quality automatically<\/strong> selected for a normal broadband connection. For a visibly slow or metered link, choose a lower connection profile and clear <strong>Desktop background<\/strong>, <strong>Font smoothing<\/strong>, <strong>Desktop composition<\/strong>, <strong>Show contents of window while dragging<\/strong>, <strong>Menu and window animation<\/strong>, and <strong>Visual styles<\/strong>.<\/li>\n\n\n<li>Keep <strong>Persistent bitmap caching<\/strong> enabled. It lets the client reuse frequently displayed images instead of downloading them again.<\/li>\n\n\n<li>On <strong>Local Resources<\/strong>, disable printers, drives, smart cards, audio, and clipboard redirection that you do not need. Each redirected device adds session work and can create delays when the device is slow or unavailable.<\/li>\n\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Select <strong>Connect<\/strong>, then test the same application you used for the baseline. These settings apply to the next connection, so disconnect and reconnect after changing them.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Microsoft\u2019s <a href=\"https:\/\/learn.microsoft.com\/en-us\/windows-server\/administration\/performance-tuning\/role\/remote-desktop\/session-hosts\" target=\"_blank\" rel=\"noopener\">Remote Desktop session-host performance guidance<\/a> explains why wallpaper, animations, and other effects increase the amount of data an RDP session must send.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 3: Keep the best RDP transport available<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Modern RDP can use UDP for most session traffic while keeping TCP for connection setup and fallback; UDP usually feels more responsive when the path allows it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">On the server, open an elevated PowerShell window and confirm that the Windows Firewall has the built-in Remote Desktop rules available:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Get-NetFirewallRule -DisplayGroup \"Remote Desktop\" | Select-Object DisplayName,Enabled,Profile,Direction,Action<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">If the rules are disabled, enable the group rather than disabling the firewall:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Enable-NetFirewallRule -DisplayGroup \"Remote Desktop\"<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The provider-level firewall must also allow TCP 3389 and UDP 3389 from only the source addresses that need RDP. If you use a non-default RDP port, substitute that port in both the Windows and provider firewall rules.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For a session host that is managed by local policy, open the editor:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>gpedit.msc<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Go to <strong>Computer Configuration \u2192 Administrative Templates \u2192 Windows Components \u2192 Remote Desktop Services \u2192 Remote Desktop Session Host \u2192 Connections \u2192 Select RDP transport protocols<\/strong>. Set the policy to <strong>Enabled<\/strong>, choose <strong>Use either UDP or TCP<\/strong>, and select <strong>Apply \u2192 OK<\/strong>. Run the following command, then reconnect:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>gpupdate \/force<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Expected output includes:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Computer Policy update has completed successfully.\nUser Policy update has completed successfully.<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Leave this policy <strong>Not Configured<\/strong> when you want Windows to choose the transport automatically. Do not use the old RemoteFX graphics policies from older guides: RemoteFX vGPU was disabled for security reasons and removed from current Windows releases.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 4: Lower server-side visual overhead when needed<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Windows visual effects and background applications compete with the application you are trying to use over RDP.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Inside the server session, press <code>Windows key + R<\/code>, enter the performance settings command, and select <strong>OK<\/strong>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SystemPropertiesPerformance.exe<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">On the <strong>Visual Effects<\/strong> tab, select <strong>Adjust for best performance<\/strong>, or choose <strong>Custom<\/strong> and keep only <strong>Smooth edges of screen fonts<\/strong> if readable text matters. Select <strong>Apply \u2192 OK<\/strong>. This is a per-user setting, so repeat it for each RDP user who needs the leaner desktop.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Next, open <strong>Task Manager \u2192 Startup apps<\/strong> and disable only applications that are not needed for the server\u2019s role. Do not disable Windows security software or a service required by a production application. On a multi-user host, also close unused applications and avoid running animated dashboards, 4K video, or GPU-heavy software through a normal VPS session.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Verify the improvement<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Reconnect with the same RDP file, resolution, and application used in Step 1. Scroll a document, drag a window, and open a representative workload for one minute. The session should respond without long pauses, and Task Manager should show that the server has CPU, memory, and disk headroom.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">On the server, confirm that RDP is listening on the expected TCP and UDP endpoints:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Get-NetTCPConnection -LocalPort 3389 -State Listen | Select-Object LocalAddress,LocalPort,State\nGet-NetUDPEndpoint -LocalPort 3389 | Select-Object LocalAddress,LocalPort<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Expected output contains a TCP listener and, when UDP is enabled, a UDP endpoint:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>LocalAddress LocalPort State\n------------ --------- -----\n0.0.0.0          3389 Listen<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">A missing UDP endpoint does not automatically mean the session is broken; TCP fallback is valid. The practical test is whether the same workload now scrolls and opens more smoothly without packet loss or resource saturation.<\/p>\n\n\n\n<aside class=\"vl-element vl-cta-banner\" aria-label=\"Need a smoother RDP VPS?\">\n\t<div class=\"vl-cta-banner__content\">\n\t\t<p class=\"vl-cta-banner__eyebrow\">Faster Windows sessions<\/p>\n\t\t<h3 class=\"vl-cta-banner__title\">Need a smoother RDP VPS?<\/h3>\n\t\t<p class=\"vl-cta-banner__text\">Get a Windows VPS with administrator access for responsive remote desktop work.<\/p>\n\t<\/div>\n\t<a class=\"vl-cta-banner__button\" href=\"\/buy-windows-rdp\" aria-label=\"View Windows RDP\">View Windows RDP<\/a>\n<\/aside>\n\n\n\n<h2 class=\"wp-block-heading\">Troubleshooting<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">RDP is still slow after the visual effects change<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The cause is probably network latency, packet loss, or an overloaded VPS rather than wallpaper or animations. Repeat the <code>ping.exe<\/code> test, then watch CPU, Memory, Disk, and Ethernet in Task Manager while the lag occurs; move large downloads and backups outside busy session hours or choose a larger VPS when the server is resource-bound.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">The first connection is delayed, or UDP causes an internal error<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">UDP 3389 is being blocked by Windows Firewall, the provider firewall, or the network between client and server. Allow UDP 3389 through every firewall that protects the server, or set <strong>Select RDP transport protocols \u2192 Enabled \u2192 Use only TCP<\/strong> as a compatibility fallback; TCP is slower for some workloads but avoids a failed UDP negotiation.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">The session is blurry or scrolling consumes too much bandwidth<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The display resolution, monitor count, or visual effects are too demanding for the available path. Reopen the RDP client, use one monitor at 1280 \u00d7 720 or 1920 \u00d7 1080, select a lower experience profile, and disable wallpaper, animations, desktop composition, and font smoothing if necessary.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><code>gpedit.msc<\/code> is unavailable or the setting changes back<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">You may be using Server Core, or an Active Directory or device-management policy is controlling the host. Apply the setting through the domain\u2019s Group Policy Management console, or ask the administrator to review the winning policy with <code>gpresult \/h C:\\Windows\\Temp\\gpresult.html<\/code>; repeatedly changing a local setting cannot override a higher-precedence policy.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">FAQ<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Is RDP performance determined by internet speed alone?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">No. Round-trip latency and packet loss often matter more than peak download speed for typing, scrolling, and window movement. A stable 5 Mbps path can feel better than a faster link with retransmissions or large latency spikes.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Should I enable every RemoteFX setting from an older guide?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">No. RemoteFX vGPU was removed from supported Windows releases because of security issues, and several RemoteFX policy names describe legacy behavior. Use current client experience settings, the standard RDP transport policy, and a supported GPU configuration only when the workload actually needs one.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Does opening UDP 3389 make RDP less secure?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">UDP is part of RDP\u2019s normal transport, but it should be restricted just like TCP. Allow TCP and UDP 3389 only from trusted addresses when possible, keep Network Level Authentication enabled, and never turn off Windows Firewall to solve a performance problem.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Will a faster RDP session make video streaming smooth?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Not necessarily. RDP is designed for interactive desktop work, not as a general-purpose video-delivery protocol. Lower the video resolution and frame rate, or use a purpose-built streaming method when the workload is continuous video.<\/p>\n\n\n\n<script type=\"application\/ld+json\">{\"@context\": \"https:\/\/schema.org\", \"@type\": \"FAQPage\", \"mainEntity\": [{\"@type\": \"Question\", \"name\": \"Is RDP performance determined by internet speed alone?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"No. Round-trip latency and packet loss often matter more than peak download speed for typing, scrolling, and window movement. A stable 5 Mbps path can feel better than a faster link with retransmissions or large latency spikes.\"}}, {\"@type\": \"Question\", \"name\": \"Should I enable every RemoteFX setting from an older guide?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"No. RemoteFX vGPU was removed from supported Windows releases because of security issues, and several RemoteFX policy names describe legacy behavior. Use current client experience settings, the standard RDP transport policy, and a supported GPU configuration only when the workload actually needs one.\"}}, {\"@type\": \"Question\", \"name\": \"Does opening UDP 3389 make RDP less secure?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"UDP is part of RDP\u2019s normal transport, but it should be restricted just like TCP. Allow TCP and UDP 3389 only from trusted addresses when possible, keep Network Level Authentication enabled, and never turn off Windows Firewall to solve a performance problem.\"}}, {\"@type\": \"Question\", \"name\": \"Will a faster RDP session make video streaming smooth?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Not necessarily. RDP is designed for interactive desktop work, not as a general-purpose video-delivery protocol. Lower the video resolution and frame rate, or use a purpose-built streaming method when the workload is continuous video.\"}}]}<\/script>\n\n","protected":false},"excerpt":{"rendered":"Improve RDP performance on Windows Server with current client, graphics, transport, and visual-effect settings, plus checks for latency and packet loss.","protected":false},"author":1,"featured_media":864,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_singular_sidebar":"","csco_page_header_type":"","csco_page_load_nextpost":"","footnotes":""},"categories":[5,11],"tags":[86,32,23,42],"class_list":["post-863","post","type-post","status-publish","format-standard","has-post-thumbnail","category-guides","category-windows-server","tag-performance","tag-rdp","tag-remote-desktop","tag-windows-server","cs-entry"],"_links":{"self":[{"href":"https:\/\/vpslake.com\/blog\/wp-json\/wp\/v2\/posts\/863","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vpslake.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vpslake.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vpslake.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vpslake.com\/blog\/wp-json\/wp\/v2\/comments?post=863"}],"version-history":[{"count":1,"href":"https:\/\/vpslake.com\/blog\/wp-json\/wp\/v2\/posts\/863\/revisions"}],"predecessor-version":[{"id":3624,"href":"https:\/\/vpslake.com\/blog\/wp-json\/wp\/v2\/posts\/863\/revisions\/3624"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vpslake.com\/blog\/wp-json\/wp\/v2\/media\/864"}],"wp:attachment":[{"href":"https:\/\/vpslake.com\/blog\/wp-json\/wp\/v2\/media?parent=863"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vpslake.com\/blog\/wp-json\/wp\/v2\/categories?post=863"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vpslake.com\/blog\/wp-json\/wp\/v2\/tags?post=863"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}