2012-02-06 27 views
7


XUL kullanarak bir firefox eklentisi geliştiriyorum ve uzantı bellek kullanımını ölçmek ve izlemek istiyorum.
Bunu nasıl yapabilirim? ve en fazla bellek kullanımını hangi işlevde kullandığını ve eklentimin firefox'a ne kadar bellek kullanımını eklediğini kontrol edin.

Firefox eklenti bellek kullanımı nasıl ölçülür

+0

size yardım edip edemeyeceğinden emin değilsiniz ... ama adres çubuğuna "about: memory" yazabilirsiniz, ancak umduğunuz kadar granüler olacağını düşünmüyorum. –

+0

hakkında: bellek hiç yardımcı olmuyor, orada bir şey anlamak için firefox bellek kullanımının nasıl çalıştığını öğrenmem gerekiyor ... ve bu çok fazla. – Yosi

cevap

6

Tek bir işlevin etkisini ölçemezsiniz, Firefox'taki bellek yönetimi bu düzeyde çalışmıyor - bölmelerle çalışıyor. Eğer kendi uzantınız kendi penceresine sahipse, o zaman bu pencerenin bölmesini about:memory?verbose altında görebileceksiniz ("Bellek kullanımını en aza indir" butonuna basınız), aksi halde çöp toplanacak olan nesneleri görebileceksiniz). Uzantınızın kodu tarayıcı penceresi bağlamında çalışıyorsa, genellikle şansınız kalmaz - onu, o sırada çalışan diğer komut dosyalarından ayırt edemezsiniz. XPCOM bileşenleri ve JavaScript modülleri ile aynıdır - hepsi "[Sistem Yöneticisi]" bölmesine yüklenir.

Komut dosyalarınızı büyük bir bölmeden ayırmak için neler yapabilirsiniz: kum havuzlarını kullanın, sandbox her zaman kendi bölmesini alır. , myExtension/browserScript.js denilen bir bölme about:memory?verbose altında gösterilir Bunun sonucunda

Components.utils.import("resource://gre/modules/Services.jsm"); 
var mySandbox = Components.utils.Sandbox(window, 
        {sandboxName: "myExtension/browserScript.js"}); 
mySandbox.window = window; // Expose window variable to scripts in the sandbox 
Services.scriptloader.loadSubScript("chrome://myextension/content/browserScript.js", 
            mySandbox); 
mySandbox.init(); // Call function init() of the script in the sandbox 

ve nesnelerle birlikte (bu senaryoyu ne kadar bellek görmek mümkün olacaktır: Örneğin, bir tarayıcı penceresinde böyle bir şey yapacağını Bu, tam olarak alır. Akılda tutulması gerekenler:

  • Sandbox'taki komut dosyası "dışardan" değişkenlere erişemez. Bu değişkenleri açık bir şekilde sanal alanın özellikleri olarak ayarlamanız gerekir (örnekteki window değişkeniyle yaptığım gibi).
  • Bölmeler ucuz değildir ve bölmeler arasındaki nesneler de ucuz değildir. Böylece, her bir işlev için bir bölme oluşturmak, ilgili genel giderler nedeniyle kötü bir fikir olacaktır. Belgeler

: Sandbox, Services.jsm

Güncelleme: Firefox itibariyle 13 işler değişti. Şu anda hafızada bulunan tüm nesneleri gösterecek this extension var. Yine de rahat olmaktan uzak, aynı zamanda tüm resmi almak önemsiz değil - ama bölümlerin altındaki bir seviyede size tanesellik verir.

+0

Çok teşekkürler, kodum kum havuzunda çalışıyor, tek ihtiyacım olan şey sadece isimleri kum havuzuma eklemek ve sonra onu profilleyebilirim, teşekkürler! – Yosi

+1

@Yosy: Cevabım için güncellemeye bakın, şimdi JavaScript nesnesinin tüm grafiğine bakabilirsiniz. –

+0

Teşekkürler Vladimir, özgün cevap sayesinde, bellek kullanımımı genişlettim, bu uzantıyı kontrol edeceğim :) – Yosi