Yardım Sunucuda Anlık Game Yükselmesi Warp Esnasında

  • Konuyu açan Konuyu açan Elvia
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 27
  • Gösterim Gösterim 517
Konu sahibi bu konuda soru soruyor. Sorusu ile ilgili bilgisi olanların yanıtlamasını bekliyor.

Elvia

Üye
Üye
Mesaj
38
Çözümler
1
Beğeni
24
Puan
269
Ticaret Puanı
0
Merhaba, örnek veriyorum c1'den bir farm mapine ışınlanırken %2 civarında anlık artış oluyor ve geri düşüyor bu normal mi? Aktif oyunda oyunumu şişiren bir şeyler vardı saatler ilerledikçe sizce bundan kaynaklanabilir mi?
 
Confused Dog GIF by MOODMAN
kanka tum martylerde var ayni muhabbet rayanu filestede vardi kac k oyuncuyla oynatti belli oyuncuya kadar oluyor devaminda yukselmiyor...
 
Genelde bu sorun Marty dosyalarının çoğunda bulunuyor. Entergame fonksiyonundaki Mevcut sistem işlemlerini kontrol etmen gerekiyor. Sorun yaratır mı? Evet, belirli durumlarda yaratabilir, bu yüzden kapsamlı şekilde test edilmesi gerekir.
 
ilk olarak cpu spike'ın memory leak ile alakası yok, o yüzden sorunu yanlış yerde arama. konuya gelirsek artış olmasının sebebi sunucudaki entitylerin birbirlerinin görüş açısına paralel çalışmasından dolayı giriş ya da çıkış yaptığında tüm entity listesine nested şekilde karakterinin durumunu işliyor, entity yoğunluğuna bağlı olarak anlık yüksek kullanım yapabiliyor.
 
ilk olarak cpu spike'ın memory leak ile alakası yok, o yüzden sorunu yanlış yerde arama. konuya gelirsek artış olmasının sebebi sunucudaki entitylerin birbirlerinin görüş açısına paralel çalışmasından dolayı giriş ya da çıkış yaptığında tüm entity listesine nested şekilde karakterinin durumunu işliyor, entity yoğunluğuna bağlı olarak anlık yüksek kullanım yapabiliyor.
''Entityler birbirlerinin görüş açısına paralel çalışıyor'' bu ifadeden kesin emin miyiz ? tek thread üzerinde sırayla çalışmıyor mu ben mi yanlış hatırlıyorum ?

“Nested şekilde entity listesi işliyor” = buradan da kesin eminmiyiz yoksa nested gibi mi davranıyor ? bölünmüş scan mantığı yok mu burada.
 
''Entityler birbirlerinin görüş açısına paralel çalışıyor'' bu ifadeden kesin emin miyiz ? tek thread üzerinde sırayla çalışmıyor mu ben mi yanlış hatırlıyorum ?

“Nested şekilde entity listesi işliyor” = buradan da kesin eminmiyiz yoksa nested gibi mi davranıyor ? bölünmüş scan mantığı yok mu burada.
paralelden kastım programlama terimi olarak değil, her entity etkileşimi bidirectional olduğu ve recursive olarak işlendiği için paralel olarak belirttim

ViewInsert'i inceleyebilirsin
 
açıkcası ben paralellik görmedim eğer kod satırı belirtirsen merak ediyorum ilgi çekiciymiş söylediklerin ve ek olarak ben kesin nested diyemiyorum bölünmüş scan gibi sanki ?

@pasha37


doğrudan çağrı:
Genişlet Daralt Kopyala
CODE title="tüm çağrılar"].

 char.cpp:3148

   `cpp

   if (bChangeTree)

   {

       EncodeInsertPacket(this);

       sectree->InsertEntity(this);

       UpdateSectree();  //  DOĞRUDAN ÇAĞRI (ASYNC DEĞİL)

   }





2. item.cpp:702

   ```cpp

   UpdateSectree();  // ← DOĞRUDAN ÇAĞRI

   ```



3. building.cpp:180

   UpdateSectree();  // ← DOĞRUDAN ÇAĞRI

  



4. private_shop.cpp:95



   UpdateSectree();  //  DOĞRUDAN ÇAĞRI





5. char_state.cpp:876



   UpdateSectree();  //  DOĞRUDAN ÇAĞRI
[/CODE]


SONUÇ: Tüm çağrılar DOĞRUDAN ve SIRAYLA yapılıyorr
 
paralelden kastım programlama terimi olarak değil, her entity etkileşimi bidirectional olduğu ve recursive olarak işlendiği için paralel olarak belirttim

ViewInsert'i inceleyebilirsin
oky anladım sonra gördüm bu yorumunu

ABD:
Genişlet Daralt Kopyala
void CEntity::ViewInsert(LPENTITY entity, bool recursive)
{
    if (this == entity)
        return;

    const auto it = m_map_view.find(entity);
    if (m_map_view.end() != it)
    {
        it->second = m_iViewAge;
        return;
    }

    m_map_view.emplace(entity, m_iViewAge);  //  A'nın view'ına B ekleniyor

    if (!entity->m_bIsObserver)
        entity->EncodeInsertPacket(this);

    if (recursive)  // RECURSIVE ÇAĞRI
        entity->ViewInsert(this, false);  // BViewInsert(A, false)
}
 
Çözüm yöntemlerini ben yazayım o zaman , @Elvia sen yinede söylediğim araçları araştır çünkü m2 sektöründe bir çok kişi bu araçlardan habersiz kodlama yapıyor.


Sorununa gelirsek ; profiling yapabilirsin - recursive çağrıyı kaldırmak - lazy encoding. seçim senin :D her çözümü ayrı ayrı test edip karşılaştırman daha iyi olur.
 
Geri
Üst