2013-04-19 11 views
24

Yöntem adı etkin bir şekilde günlüğe kaydetmenin yollarını bulmaya çalışıyorum w.r.t. hız ve süreklilik. Sanırım .Net 4.5 Caller Information attributes, hız kısmı hariç sadece bu amaç için ortaya çıkıyor. Bunların sadece System.Reflection.MethodBase.GetCurrentMethod() veya stackTrace.GetFrame (1) .GetMethod() adını kullanarak sözdizimsel şekerler olduğunu hissediyorum. (here var). (veya) Bu yöntemler de performans avantajları sağlıyor mu?Performans Caller Information öznitelikleri kullanılarak vuruldu

C# 'da, derleme zamanında yöntem adını almanın bir yolu var mı (c++'da olduğu gibi)?

+4

aslında onların performansını profilli mı, yoksa şunlardır:

public void DoProcessing() { LogCall(); } public void LogCall([CallerMemberName] string memberName = "") { Console.WriteLine(memberName + " was called."); } 

için derlenmiş olacak mı? –

+0

@DanielKelley Performansı ölçmedim. Arayan Bilgisi özelliklerinin kapsamı altında neler olduğunu bilmek istedim. Daniel, değiştirmenin tam olarak aradığım derleme zamanında gerçekleştiğini söyledi. – Imran

cevap

51

Arayanın bilgi öznitelikleri, C# derleyicisinin, arayanın adını arayan kişinin adına göndermesine neden olur. Bu derleme zamanında gerçekleşir, yansıma yoktur. sadece bir sorun olmayabilir bir sorunu önceden empting

public void DoProcessing() 
{ 
    LogCall("DoProcessing"); 
} 

public void LogCall(string memberName) 
{ 
    Console.WriteLine(memberName + " was called."); 
} 
+0

Bu tam olarak aradığım şey. Hızlı cevabın için teşekkürler. .NET'in eski sürümlerinde derleme zamanı değiştirme işlemine ulaşmak için herhangi bir fikriniz var mı? – Imran

+1

[CallerMemberInfo], C# 5 derleyicisini kullandığınız sürece herhangi bir .NET sürümü ile çalışacaktır. Bkz. Http://stackoverflow.com/questions/13381917/is-the-callermembername-attribute-in-4-5-able-to-be-faked – Daniel

+0

Bağlantı için teşekkürler. Şu anda VS2012 gerektiren C# 5 derleyicisi kullanmıyorum. – Imran