c# – 本地字符串变量的实例化会影响性能吗?
发布时间:2020-12-16 00:07:16 所属栏目:百科 来源:网络整理
导读:我有两种情况: static void CreateCopyOfString() { string s = "Hello"; ProcessString(s); } 和 static void DoNotCreateCopyOfString() { ProcessString("Hello"); } 这两种情况的IL看起来像这样: .method private hidebysig static void CreateCopyOfS
我有两种情况:
static void CreateCopyOfString() { string s = "Hello"; ProcessString(s); } 和 static void DoNotCreateCopyOfString() { ProcessString("Hello"); } 这两种情况的IL看起来像这样: .method private hidebysig static void CreateCopyOfString() cil managed { // Code size 15 (0xf) .maxstack 1 .locals init ([0] string s) IL_0000: nop IL_0001: ldstr "Hello" IL_0006: stloc.0 IL_0007: ldloc.0 IL_0008: call void ConsoleApplication1.Program::ProcessString(string) IL_000d: nop IL_000e: ret } // end of method Program::CreateCopyOfString 和 .method private hidebysig static void DoNotCreateCopyOfString() cil managed { // Code size 13 (0xd) .maxstack 8 IL_0000: nop IL_0001: ldstr "Hello" IL_0006: call void ConsoleApplication1.Program::ProcessString(string) IL_000b: nop IL_000c: ret } // end of method Program::DoNotCreateCopyOfString 在第一种情况下,还有对字符串init,stloc.0和ldloc.0的额外调用. 我看到了问题Does initialization of local variable with null impacts performance?,但它似乎与我在这里需要知道的有点不同.谢谢. 解决方法
你看一下未经优化的IL,一方面 – 因此所有的“nop”.在构建Release版本时,您可能会发现它生成了不同的代码.
即使使用未经优化的版本,如果您在优化的JIT下运行,我希望它最终得到相同的JITted代码. 即使使用非优化的JIT实际上生成的代码每次调用时都会执行更多的工作,但我会错切地认为这对任何实际应用程序都有重大影响. 如初: >在开始之前设定绩效目标,并对其进行衡量.>确定哪些决策在以后的性能方面难以解决,并且担心这些决定远远超过这样的决定,这些决定可以在以后更改,而不会影响其他地方.>编写最先简单,最易读的代码.>如果效果不佳,请调查是否进行了有害可读性的更改有助于提高性能以保证疼痛. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |