cost 163 ms
表情健全的成員如何區分void和non-void?

[英]How do expression bodied members distinguish between void and non-void?

使用C#6的表達式強健的成員,我可以編寫: public string FullName => $"{_firstName} {_lastName}"; 我可以寫: static void Print(string message) => Console.WriteL ...

如何識別將傳遞給Mono.Cecil中的特定IL方法調用的參數

[英]How can I identify the arguments that will be passed to a particular IL method call in Mono.Cecil

我正在使用Mono.Cecil對程序集進行一些分析和重寫。 在某些情況下,這很簡單:您可以在調用之前查看,以查看參數的加載位置: 但是,當函數的參數本身是復雜的表達式時,這會變得更復雜: 在這種情況下,在加載第一個參數和加載第二個參數之間會發生一堆事情。 我想知道:Mono. ...

創建類型指令

[英]Create an Instruction for Type

使用Mono.Cecil,給出了這種方法 當value類型為Type時,如何創建可以加載value的Instruction ? 我注意到value是Type ,我可以測試它,如下所示: 但我無法弄清楚我需要傳遞給Create以獲得正確加載的值。 編輯: 使用這個 ...

我是否需要在ldloca之前調用initobj / assign null退出參數並調用?

[英]Do I need to initobj/assign null to out arguments before ldloca and call?

如我所見,C#編譯器和Reflection.Emit始終為值和引用類型變量發出.locals init (即使它們后來無條件地初始化了)。 因此可以將它們作為out參數傳遞: 有沒有在沒有init情況下使用.locals情況,因此在發出call / callvirt之前,我需要確保變量 ...

簡短說明有更好的表現嗎?

[英]Do short instructions have better performance?

我真的需要關心可以發出.s指令的地方嗎? 或者它只會影響尺寸,但真正的性能會是一樣的嗎? 生成的dll也將在AOT平台上使用。 對於帶有.s和沒有的IL,得到的AOT-ed dll是否相同? 我的意思是br.s , ldloca.s等。 ...

Fody Async MethodDecorator處理異常

[英]Fody Async MethodDecorator to Handle Exceptions

我試圖使用Fody來包裝從具有常見異常格式的方法拋出的所有異常。 所以我添加了所需的接口聲明和類實現,如下所示: 以及看起來像這樣的域實現 這適用於同步代碼。 但是對於異步代碼,即使執行了所有其他IMethodDecorator(如OnExit和OnTaskContinu ...

未賦值類的調用方法

[英]Calling method of non-assigned class

我對這兩方面有疑問; 第一; 第二個; 如果我們不將新創建的實例分配給變量並直接調用該方法會發生什么? 我在 IL 代碼上看到兩種方式之間的一些差異。 下面這個是第一個 c# 代碼的 IL 輸出 這是第二個c#代碼的IL輸出 你能通知我嗎? ...

2016-01-26 14:16:02   2   263    c# / oop / il  
從IL構造方法引用集合

[英]Reference a collection from IL constructed method

我正在建立使用反射的動態方法。 大多數教程和文檔(例如, 如何:定義和執行動態方法或動態 創建方法並執行 )都顯示了一個非常簡單的示例。 我試圖找到一種從動態程序集中引用另一個程序集的方法。 例如,我希望能夠通過使用Reflection.Emit構造以下函數。 這樣做的常見 ...

從IL創建方法的副本

[英]Create a copy of method from IL

我正在嘗試使用反射在運行時創建方法的副本。 我有以下代碼。 最后一行引發異常消息: 公共語言運行時檢測到無效程序。 還有另一種方法嗎? 我希望能夠獲得該方法的語法樹,而不是直接使用IL。 編輯1 : 我正在測試以下功能。 用以下行進行測試。 ...

如何在IL中浮動和雙重工作

[英]How float and double work in IL

當我們聲明一個int變量時,例如: 生成以下IL: 我可以理解1A是16的十六進制表示,所以我理解正確的十六進制值被保存用於指代它的值或它意味着不同的東西? 當我聲明一個雙變量時: 生成IL后,我無法得到一些東西: 23怎么樣,它意味着什么, AE47E17 ...

確保方法返回值不被庫丟棄

[英]Ensure that method return value is not discarded for library

我的庫中有一些方法,其返回值不應該被丟棄。 即使對我來說,泄漏它們也是一個非常普遍的錯誤。 因此,我希望編譯器在這樣做時提醒程序員。 該值可以存儲或用作其他方法的參數。 並非嚴格使用存儲的值,但是如果將其簡單地丟棄,則是100%錯誤。 有什么簡便的設置方法可以對我的圖書館用戶實 ...

System.Reflection.Emit - 如果語句生成

[英]System.Reflection.Emit - If Statement Generation

我正在嘗試學習如何在C#中使用ILGenerator生成If語句。 這是我的代碼:(ilg是ILGenerator) 一些說明: 獨自調用Console.WriteLine完美運行。 這是我運行生成的exe時得到的錯誤: 未處理的異常:System.I ...

如果新的c#6“?”null檢查,則調用而不是callvirt

[英]call instead of callvirt in case of the new c# 6 “?” null check

鑒於這兩種方法: 為什么M1 IL代碼使用callvirt : 和M2 IL使用call : 我只能猜到它,因為在M2中我們知道p不是null而是它 這是真的嗎? 如果是,如果p在其他線程中為空怎么辦? ...

錯誤的IL格式錯誤:.NET動態組裝

[英]Bad IL Format Error: .NET Dynamic Assembly

調用Assembly.Load()時,出現BadFormatException並顯示消息“錯誤的IL格式錯誤”。 在我的項目中。 我正在使用rapberry-sharp-io,並且嘗試通過網絡發送DLL並加載它們。 在過去,我已成功完成此操作,方法是讀取“ bin”文件夾的DLL文件並將其 ...

在JIT / AOT編譯期間,CIL ldstr是否被替換為對string.Intern的常量引用?

[英]Is CIL ldstr replaced with constant reference to the string.Intern during JIT/AOT compilation?

假設我有一個需要優化但同時易於調試的代碼。 因此,我會為我使用的每個值分配一個字符串。 該字符串是否會造成重大性能損失,或者它是否會變成在JIT / AOT編譯期間從string.Intern獲取的常量引用,從而轉換為單個簡單指令? 例: 在IL,它將是ldstr "gazili ...

CIL unbox_any指令 - 奇怪的行為

[英]CIL unbox_any instruction - strange behavior

相同的C#代碼是: 我的問題是: 為什么unbox.any被稱為? 如果你這樣做 isinst intruction將調用而不是unbox.any,如果我將刪除泛型定義並且我將嘗試將(isinst)對象強制轉換為某個類,則不會調用unbox.any。 也許因為泛 ...

重寫IL以在方法調用周圍最終嘗試注入

[英]Rewrite IL to inject try-finally around method call

我想將sql記錄注入一些方法中。 基本上我想轉型 成 我得到了一些簡單的案例,目前面臨的問題是,輸入.try時堆棧必須為空。 我最初的假設是IDbCommand本身是在調用ExecuteScalar之前直接加載的,因此我搜索callvirt,然后使用Instruction ...

為什么C# - > CIL在每條指令上都有標簽?

[英]Why does C# -> CIL have a label on every instruction?

在已編譯的C#程序上使用ILDASM.exe時,它會顯示方法中的每條指令都有一個標簽。 例如: 為什么是這樣? 這樣做效率不高或者CIL編譯器本身是否優化這些標簽? ...

添加一個int變量時生成不同的IL

[英]Different IL generated when adding one more int variable

我在c#中有這個程序: 當我編譯它時,以下是編譯器為Main生成的IL: 這很好,我理解它,現在如果我添加另一個整數變量然后生成不同的東西,這里是修改后的c#代碼: 這是針對上面的c#代碼生成的IL: 如果你現在注意到stloc.s語句是用V_4生成的,這是本地的 ...

計算IL代碼中的maxstack值

[英]Calculation of maxstack value in IL code

我有以下程序來添加值。 當我在main方法中調用Add方法調用並查看ILDASM.EXE時,Maxstack大小為2.並且在取消注釋后,maxstack大小變為4。 為什么在Main方法的情況下所有變量都不會進入堆棧,因為堆棧大小僅為2,而在Add方法調用的情況下,每個變量都進入堆棧? ...


 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM