Bazı sınıfların derlenmiş kodlarının (bayt cinsinden) ne kadar büyük olduğunu kontrol etmek istiyorum. Onları boyut için optimize etmek isterim, ama nereden başlayacağımı bilmem gerek.C# Kod boyutunu belirle
cevap
çalışma zamanında bir sınıf/tür saklamak için gereken bayt olarak boyutunu bilmek istiyorsanız.
value types için için, her alan/özellikte sizeof
kullanın.
yönetilen dll boyutunu bilmek istiyorsanız
, açık yolu dll derlemek ve dosya boyutunu kontrol etmektir. Bunu programatik olarak yapmak için, user1027167'nin cevabına veCodeDomProvider
sınıfına bir göz atın.
Kodda yapılabilecek başka bir şey, sınıflarınızdaki her yöntemin oluşturulmuş IL'sini ve (belki de yalnızca göreceli) bir ölçüsü olarak sizeof
alanlarını elde etmektir.
Bunun için MethodBase.GetMethodBody yöntemi kullanabilirsiniz. Roslyn (compiler as a service)(preview available) yayınlandıktan sonra bir sınıf IL oluşturan sadece yöntemleri ve alanları olduğu gibi
muhtemelen (doğrusu daha kolay ve muhtemelen bunu alabilir.
Eğer bilmek istiyorsanız Bir DLL üretmek için kullanılan kod boyutu, Reflector
Yönetilen DLL'deki her sınıfın kod boyutunu bilmek istiyorum. –
Kod boyutu derken, DLL boyutunu veya DLL'yi üretmek için kullanılan kod boyutunu mı kastediyorsunuz? –
Derlenmiş kodun boyutu = DLL :) –
gibi bir şeye bakmak zorundasınız Derlenmiş kodunuzun bayt cinsinden boyutunu bilmek istediğinizi varsayalım, bunu derlemelisiniz. it, şuna bak:
"ICodeCompiler comp = (new CSharpCodeProvider().CreateCompiler());
CompilerParameters cp = new CompilerParameters();
cp.ReferencedAssemblies.Add("system.dll");
cp.ReferencedAssemblies.Add("system.data.dll");
cp.ReferencedAssemblies.Add("system.xml.dll");
cp.GenerateExecutable = false;
cp.GenerateInMemory = true;
CompilerResults cr = comp.CompileAssemblyFromSource(cp, code.ToString());
if (cr.Errors.HasErrors)
{
StringBuilder error = new StringBuilder();
error.Append("Error Compiling Expression: ");
foreach (CompilerError err in cr.Errors)
{
error.AppendFormat("{0}\n", err.ErrorText);
}
throw new Exception("Error Compiling Expression: " + error.ToString());
}
Assembly a = cr.CompiledAssembly;
" Kod "değişkeni (burada bir StringBuilder), ölçmek istediğiniz sınıfınızın geçerli kaynak kodunu içermelidir. Derlemeden sonra sadece çıkış düzeneğinin boyutuna bakmak zorundasınız.
'CSharpCodeProvider.CreateCompiler' yönteminin artık kullanılmadığını unutmayın. "CSharpCodeProvider" üzerindeki 'ICodeCompiler' yöntemlerini doğrudan kullanabilirsiniz. –
Bir çözüm olabilir. Bazı refactoring yapmak zorundayım, ama işe yarayabilir. –
bir yöntemi Yansıma ile MSIL boyutunu almak olacaktır. MSIL'in boyutunu belirlemek için tüm yöntemler, Özellik belirteçleri ve alıcılar ve kurucular arasında geçiş yapmanız gerekir. Ayrıca, Debug ve Release sürümlerine dayanan boyut farklılıkları olacaktır.
using System.Reflection;
int totalSize = 0;
foreach(var mi in typeof(Example).GetMethods(BindingFlags.Public | BindingFlags.NonPublic |BindingFlags.Static | BindingFlags.Instance | BindingFlags.GetProperty | BindingFlags.SetProperty))
{
MethodInfo mi = typeof(Example).GetMethod("MethodBodyExample");
MethodBody mb = mi.GetMethodBody();
totalSize += mb.GetILAsByteArray().Length;
}
Tek bir yöntemin MSIL boyutunu nasıl bulacağımı araştırıyordum, bir yöntemin belirtilip çizilmeyeceğini tahmin ediyordum ve bu benim için bir çözümdü. Teşekkürler! –
- 1. Sayfa belirleme boyutu sayfa boyutunu belirle DropDownList in jilet View
- 2. C# MVC Başarılı Http Durum Kodunu Belirle
- 3. Sabit sürücünün küme boyutunu alma (kod aracılığıyla)
- 4. C# Kod boyutu ve Kod yürütme süresi
- 5. Winform kontrol boyutunu yönetilmeyen kod içine aktaramazsınız
- 6. dotnet sürümümü belirle
- 7. Websocket send() bittiğinde belirle
- 8. Temel URL'yi Belirle
- 9. SQL Server Sorgulama Boyutları Sonuçları Belirle
- 10. Tüm alt öğelerin genişliğini belirle
- 11. C# resize yeniden boyutlandırma dosya boyutunu artıracaktır
- 12. Geçerli HINSTANCE'ı belirle?
- 13. Görüntüdeki kalıbı belirle
- 14. Android'de ProgressDialog öğesini belirle
- 15. size JavaScript´te görüntü boyutunu parametreniz olmadan belirle 0 <img> `etiketi
- 16. HDF5 C Kod üretimi
- 17. C# Erişilemeyen kod algılandı
- 18. C++ kod içermez
- 19. C# kod sınıf diyagramı
- 20. Kod ayrıştırma C#
- 21. Netbeans Kod Yardımı C++
- 22. sınıflandırma için rasgele ormanı belirle
- 23. İki dikdörtgenin kesişme alanını belirle
- 24. PHP Dizisindeki Boyutların sayısını Belirle
- 25. GWT CellTable - sütun genişliği belirle
- 26. Android çevirici varsayılan metni belirle
- 27. Programlı C maksimum statik dizi boyutunu bulmak ++
- 28. C#, Emgu webcam - yakalama boyutunu seç
- 29. xtable + knitr sütun genişliğini belirle html
- 30. Gönderme/yenileme sonrasında seçili seçeneği belirle seç
Yanlış bir dil kullanıyoruz. – ordag
Windows Gezgini? ;-) – jadarnel27
Bu arzun arkasında herhangi bir pratik akıl yürütme var mı, yoksa tamamen boşta merak mı? – LukeH