2016-04-10 34 views
0

2418060 karakter uzunluğunda bir karakter dizisi var. Bu dize numaralar, braketler ve bazı özel simgeler içerir. It LindermayerSystem yüzden her karakter mekânsal eylem ve değişkenler olduğunu var bracet içinde numarasına sahip olan bir numuneDize yineleme C# mono

!(242.9288)F(562.7884)/(45)!(242.9288)F(126.8685)&(18.95)F(126.8685)!(140.2591)F(114.399)& 

bu.

Bunu nasıl hızlı bir şekilde yineleyebilirim?

switch (array[i]) 
      { 
       //TurnLeft 
       case '+': 
        i+=2; 
        do 
        { 
         checkingString.Append(array[i]); 
         i++; 
        } while (array[i] != ')'); 

        value=float.Parse(checkingString.ToString()); 

        currentPosRot.rotation = Quaternion.AngleAxis(value, Vector3.left) * currentPosRot.rotation; 

        //position = position + (rotation * new Vector3(0, 2, 0)); 

        //curve.AddPointAt(position); 


        checkingString = new StringBuilder(); 

        value = 0.0f; 
        break; 
       //Turn right 
       case '-': ... 
+0

Neden düşüşler? –

cevap

0

Bu bir optimizasyon problemidir: Ben son 10 dakika ve Birlik içindeki elbette .. bundan sonra yanıt vermiyor döngüsü için basit tarafından Char tarafından kömürü yineleme ediyorum zaman anahtarı var. Bu özel durumda, ikinci optimizasyon kuralının geçerli olacağını varsayalım: Henüz optimizasyon yapmayın.

Adım 1: Giriş verilerinizi (2 MB dizgisi) makul ölçüde iyi test edilebilir boyuta kadar kesin. Unity profiler ekleyebilmeniz ve performans sonuçlarını 10 saniyeden daha kısa sürede alabilmeniz için bunu yapın.

Adım 2: Profil. İşlem süresinin tam olarak nerede olduğunu görün.

Adım 3: En iyi 1 kez tüketiciyi seçin ve daha az işlem gücü gerektirecek şekilde iyileştirin. Ardından, performans sorununuzu çözene kadar 2. adımdan başlayın.