Symptoms
Download speed while using WebClient is slow when downloading AssetBundles or other web content in Unity.
Cause
WebClient, which uses WebRequest, can be slow when downloading AssetBundles since Unity's modern asset loading systems are optimized for different approaches. Additionally, WebClient may have default configuration issues that impact performance.
Resolution
For WebClient optimization (if you must use WebClient):
This is a potential workaround: Declare the WebClient's proxy to null (webClient.Proxy = null) since the request is configured to auto-detect proxies. If this is declared, it will avoid an initial delay. Additional suggestions to speed up WebClient:
• Increase DefaultConnectionLimit • If a proxy is needed (don't use webClient.Proxy = null) and settings are known, establish settings manually by script • Deactivate Expect100Continue
Recommended Modern Approach:
Instead of WebClient, use Unity's built-in web request systems:
For AssetBundles:
csharp
UnityWebRequest request = UnityWebRequestAssetBundle.GetAssetBundle(url);
yield return request.SendWebRequest();
if (request.result == UnityWebRequest.Result.Success)
{
AssetBundle bundle = DownloadHandlerAssetBundle.GetContent(request);
// Use the bundle
}
For Addressables (Recommended): Unity's Addressables system provides optimized asset downloading with built-in caching:
csharp
var handle = Addressables.LoadAssetAsync<GameObject>("AssetKey");
yield return handle;
GameObject asset = handle.Result;
For general web requests:
csharp
UnityWebRequest request = UnityWebRequest.Get(url);
yield return request.SendWebRequest();
if (request.result == UnityWebRequest.Result.Success)
{
string data = request.downloadHandler.text;
}
More Information
For modern Unity web requests and asset management: • UnityWebRequest Documentation • Addressables User Guide • AssetBundle Fundamentals
For WebClient optimization (general .NET): • http://stackoverflow.com/questions/754333/why-is-this-webrequest-code-slow • http://en.code-bude.net/2013/01/21/3-things-you-should-know-to-speed-up-httpwebrequest/
This article applies to Unity 2022.3 LTS and above.