сильные лаги при параллельном запросе нескольких картинок

Графический интерфейс пользователя

сильные лаги при параллельном запросе нескольких картинок

Сообщение undefined 18 сен 2019, 16:12

Похоже какой-то баг в свежей Unity 2019.2.5f1(64 bit)

Имеется ScrollView(нативный),в котором сидит туча картинок.Картинки по мере появления грузят в себя контент через UnityWebRequest.
Если картинка вылезает из скроллвью, реквест отменяется.
Единовременно во вьюпорте не больше 15 картинок.Так вот,когда они все разом шлют реквесты первой картинке ответ приходит через ~0.5сек, а всем остальным через 2-2.5 сек
Весь UI при этом фризится.Компилирую этот же проект в Unity 2018 - и о чудо,всем картинкам контент приходит через ~0.5сек.Как на зло, эта пакость вылезает только в браузере.Вот код загрузчика на имаджах:
Синтаксис:
Используется csharp
public class AlphaImage : MonoBehaviour
{
    public RawImage Image;
    private string loadedUrl;
    private IEnumerator deferredRoutine;
    private UnityWebRequest www;
    public void Fetch(string ur) {
        if (url == null) {
            Image.texture = null;
            return;
        }
        if (loadedUrl != null && loadedUrl.Equals(url))
            return;
        www?.Abort();
        StopAllCoroutines();
        var routine = load(url);
        if (!gameObject.activeInHierarchy || !gameObject.activeSelf) {
            deferredRoutine = routine;
        } else
            StartCoroutine(routine);
    }

    private void OnEnable() {
        CanvasGroup cg = GetComponent<CanvasGroup>();
        if (cg != null)
            cg.alpha = 1;
        if (deferredRoutine != null) {
            StartCoroutine(deferredRoutine);
            deferredRoutine = null;
        }
    }
    private IEnumerator load(string ur) {
        float dur = ViewConfig.GeneralAnimDuration;
        Image.texture = null;
        loadedUrl = null;
        if (www != null) {
            http://www.Abort();
            www = null;
        }
        var imgRt = Image.GetComponent<RectTransform>();
        www = UnityWebRequest.Get(url);
        var ts = Time.realtimeSinceStartup;
        yield return http://www.SendWebRequest();
        print("ts:" + (Time.realtimeSinceStartup - ts));
        loadedUrl = url;
        Texture2D texture = new Texture2D(1, 1, TextureFormat.ARGB32, false);
        texture.LoadImage(http://www.downloadHandler.data);
        http://www.Dispose();
        www = null;
        Image.texture = texture;
        //
        var cg = GetComponent<CanvasGroup>();
        if (cg == null)
            cg = gameObject.AddComponent<CanvasGroup>();
        cg.alpha = 0;
        float time = 0;
        while (time < dur) {
            time += Time.deltaTime;
            cg.alpha = time / dur;
            yield return null;
        }
        cg.alpha = 1;
    }
    private void OnDestroy() {
        print("destroyed");
        StopAllCoroutines();
        if (www != null) {
            http://www.Abort();
            www = null;
        }
    }
    public void Clear() {
        StopAllCoroutines();
        if (www != null) {
            http://www.Abort();
            www = null;
        }
        Image.texture = null;
        loadedUrl = null;
    }
}
 

Перед писаниной в саппорт хотелось бы узнать сталкивался ли кто еще?
undefined
UNец
 
Сообщения: 1
Зарегистрирован: 18 сен 2019, 15:39

Вернуться в uGUI

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2