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-after
Bu ö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-measure
Bu ö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 first
Sonuç
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:
profile
ifadeleri 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.
profile
ifadelerini iç içe yerleştirmekten kaçın. İç içe yerleştirme de işlevini yerine getirecektir ancak içtekiprofile
ifadesinin yaratacağı profil oluşturma ek yükü, dıştakiprofile
ifadesinin süresine dahil olacak, bu da sonuçlarını etkileyecektir.profile
ifadelerini 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 profile
profile
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 }