profile ifadesiyle kodunun performansını ölçmek üzere onu izleyebilirsin. Aşağıda, bir kod blokunda profile ifadesinin kullanımına ilişkin sözdizimi yer alıyor.
code-before
profile:
code-to-measure
code-afterBu örnekte slow-code, kullanıcının performansını ölçmek istediği bir kod blokunu temsil eder. Kod çalıştırıldığında, profile kod blokuna girilmesi ve çıkılması arasındaki milisaniye cinsinden süre UEFN’deki Çıktı Günlüğüne yazdırılır.
Profili oluşturulan kodun çıktısını LogVerse: VerseProfile: 0.023900 ms olarak görebilirsin. Kodunda birden fazla profil ifadesi varsa ve çıktıyı düzenlemek istiyorsan profil ifadene kullanıcı Etiketleri olarak bir dize ekleyebilirsin:
profile(“User String to Categorize Output”):
code-to-measureBu örnekte çıktı, LogVerse: VerseProfile: User String to Categorize Output 0.023900 ms şeklinde görünecektir.
profile ifadesini, yazdırma günlük kaydı da olan bir başarısızlık bağlamında kullanırsan profil çıktısının tamamı, koddaki profile ifadelerinin ve yazdırma çağrılarının sırasından bağımsız olarak Çıktı Günlüğündeki yazdırmalardan önce raporlanır.
profile kod bloku bir defer ifadesine sahipse defer ifadesinin de profili oluşturulur ancak bu ifade, profile kod blokundan çıkarken en sonda çalıştırılır.
MyFunction1():void=
defer:
MyFunction2() # code is not profiled
profile:
defer:
MyFunction3() # code is profiled and run last
MyFunction4() # code is profiled and run firstSonuç
Verse’teki her şey bir ifadedir, bu sebeple bir sonucu vardır ve buna profile ifadesi de dahildir. profile ifadesi, sonuç değerlerini, if ifadelerinde olduğu gibi iletir.
Bu örnekte, MyFunction, profile ifadesinden geçirilen ve ResultOfFunction değişkeninde depolanan bir değer döndürür. Bu, kod izlemesini fonksiyon çağrılarına göre düzenleyebileceğin ve bu fonksiyon çağrılarının sonuçlarını profil kod bloku kapsamı dışında kullanabileceğin anlamına gelir.
ResultOfFunction := profile(“MyFunction”):
MyFunction()İpuçları ve Örnek Uygulamalar
profile ifadesiyle çalışırken aşağıdaki ipuçlarını ve örnek uygulamaları göz önünde bulundur:
profileifadeleri tarafından raporlanan zamanlamalar belirli bir kod parçası için belirleyici değildir. Ölçülen fiili süre; oyunun durumu, oyuncu sayısı, sunucu donanımındaki yük ve ağ gecikmesi gibi senin kontrolün dışında olan pek çok faktöre bağlı olabilir veya olmayabilir. En iyi, ortalama ve en kötü durumları belirlemek ve hangi veri noktalarının aykırı değerler olduğunu anlamak için bir kod parçasının profilini birden fazla kez oluşturmak en iyisidir.Profil oluşturmanın ek yükü azdır ve büyük ölçüde günlük kaydı ve kullanıcı etiketine ilişkin dize interpolasyonlarından kaynaklanır. Bu işlemler, profil oluşturma sonucuna kısa bir süre ekleyebilir, bu yüzden profil oluşturma çalışmanı ilgi alanlarına odakla ve kullanıcı etiketlerini basit tut.
profileifadelerini iç içe yerleştirmekten kaçın. İç içe yerleştirme de işlevini yerine getirecektir ancak içtekiprofileifadesinin yaratacağı profil oluşturma ek yükü, dıştakiprofileifadesinin süresine dahil olacak, bu da sonuçlarını etkileyecektir.profileifadelerini gönderime hazır oyun kodundan çıkar. Profil kodu oluşturma şu anda gönderim derlemeleri dışında bırakılmış değildir, dolayısıyla profil ifadelerini oyun içi kodlarda bırakman halinde bu ifadeler söz konusu kodlarda istenmeyen bir ek yük oluşturacaktır.
Bilinen Kısıtlamalar
profile ifadesi kullanımının bilinen kısıtlamaları aşağıdaki gibidir.
profile ifadesini asenk. bir bağlamda kullanabilirsin ancak şu anda bir profile kod blokunda asenk. bir kod çağıramazsın. Aşağıdaki örnek bu durumu göstermektedir.
MyAsyncFunction()<suspends>:void=
profile: # Allowed inside <suspends> function
MyRandomInt := GetRandomInt(10, 100) # Allowed inside profile
Sleep(0.0) # Not allowed inside profileprofile ifadesini class üyelerinin statik veri başlatmasıyla kullanamazsın. Aşağıdaki örneğe izin verilmez.
my_class := class:
Value:int = profile{ 1 + 2 + 3 }