当前位置: 首页 > 编程语言 > C#

C#,在for..loop中声明一个变量会降低性能吗?分享

时间:2023-04-10 14:38:23 C#

C#,在for..loop中声明一个变量,会不会降低性能?例如:for(i=0;i<100;i++){stringmyvar="";//一些逻辑}它会泄漏性能或内存吗?为什么我这样做,因为我不想在for..loop之外访问“myvar”。它是任何性能监视器,我可以比较两个片段或整个程序之间的执行时间吗?谢谢。不,变量纯粹是为了方便程序员。在哪里声明它们并不重要。有关详细信息,请参阅我对这个重复问题的回答。也许你可以查看我在另一次对话中所做的旧测试。变量声明。事实证明,优化方法重新定义速度更快,但内存友好性较低。我的简单测试。我正在初始化一个对象100,000,000次,创建一个新对象显然比重新使用旧对象更快:Ostringoutput="";{DateTimestartTime1=DateTime.Now;myclasscls=newmyclass();for(inti=0;i我相信这将是一个性能问题。由于VM需要分配内存来存储每个循环对String的引用。即使引用可能是相同的String实例,分配内存每个循环是不是可取的。更新:如果你使用与循环相同类型的变量,你可以做我最初提取的内容:for(inti=0,myvar=0;否则我不用担心@phoog,因为其他人已经建议,thxchecktheanswerforprovingarealExample:Ijustwritean.objmodelloader,当然,它包含一些嵌套循环。我在我的循环之上声明了所有变量,但后来我开始想知道与OP相同的事情和找到了这个线程。所以我尝试将所有变量声明移动到我循环的第一个点,在那里我使用它们并且实际上看到了一个小的性能提升。以前平均加载380毫秒(实际上是370-400毫秒)模型现在加载大约15-20ms更快。这只有大约5%,但仍然是一个进步。我的循环结构只有一个foreach循环和一个嵌套的for循环,还有很多if语句。我移动了5个变量声明,其中大部分是字符串和整数数组。是的,这会产生内存使用问题。我不相信它会导致内存泄漏,因为垃圾收集器最终会收集未使用的对象,但这会对应用程序的性能产生负面影响。我建议您使用在for循环范围之外声明的字符串生成器。它不会彻底降低性能或导致内存泄漏,但仍然需要小心。字符串是不可变的,这意味着它们一旦创建就无法更改。通过在循环内创建一个新字符串,您将创建至少n个字符串变量。如果您尝试在循环中进行字符串操作,您应该考虑使用StringBuilder。除非编译器以某种方式优化代码,否则在for循环内声明变量将需要分配新变量和旧变量集。话虽这么说,编译器在优化代码方面做得很好。如果您想快速测试这两种情况,请使用StopWatch类来测量执行每种情况所花费的时间。我的猜测是这种差异是不存在的,可以忽略不计。以上是C#学习教程:C#,在for..loop中声明一个变量会降低性能吗?如果分享的所有内容对您有用,需要了解更多C#学习教程,希望您多多关注---本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: