SizeOf referenčního typu   zodpovězená otázka

VB.NET, Compact Framework

Dobrý den,

lze nějak v CF.NET zjistit aktuální velikost referenčního typu.

V C# je kl. slovo sizeOf v VB asi není. A i sizeOf zjistí podle dokumentace velikost hodnotového typu ne referenčního.

Na netu jsem našel možnost: objekt serializovat a zjistit si velikost streamu, ale v CF není binaryFormatter.

za nástřel předem děkuji.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Proboha jak byste chtěl zjistit velikost referenčního typu?! Pokud serializujete objekt, tak tam 50% dat bude právě na režii té serializace. Pokud chcete zjistit velikost hodnotového typu, k tomu slouží metoda Len.

Dim n As Integer = 666
Dim d = Now
Dim x = Len(n) 'Bude mít hodnotu 4 (4 bajty = 32-bitový Integer)
x = Len(d) 'Struktura DateTime zabírá také 4 bajty

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

No jde o to, že mám zařízení s menší pamětí běžící na CE, u kterého mi nepravidelně program spadne s chybou o nedostatečné paměti.

V aplikaci je cca 14 kolekcí typu Listof. Které se zvětšují a zmenšují dost nepravidelně, jsou v nich třídy obsahující i nějaké bitmapy ... . Chtěl bych docílit toho, že po přidání položky do kolekce se mi provede kontrola velikosti kolece, a v případě, že bude větší než XXX tak by se další přidávání znemožnilo a šlo by pouze odebírat z kolekce.

Za Len děkuji.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Tak to by vám rozhodně nepomohlo, protože se všechno alokuje dynamicky. Něco děláte špatně a neefektivně, necháváte v paměti reference na něco co už není potřeba. Nebo také děláte něco náročného, co daný hardware nezvládne. Ujistěte se, že používáte Using všude kde to jde. Můžete také zkusit vynutit sběr odpadu pomocí metody GC.Collect() i když se to nedoporučuje a nastudovat použití WeakReference.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Pokud pracujete s bitmapami, nezapomínejte na ně volat Dispose, aby po sobě uvolnily paměť, v případě, že už je nepotřebujete.

Mějte na paměti, že ve Windows CE může mít jedna aplikace typicky jen pár MB paměti, i když zařízení má paměti daleko více. Dá se to sice obejít, ale v .NETu dost těžko.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback