关于C#中for与foreach的性能比较测试

Unity下C# for each与for性能测试 平时写代码总感觉for each用着比for方便,所以for each会有更大的资源开销 今天就测试一下,看for each会多花费多少资源 for each 与 for 测试代码: using System; using UnityEngine; public class NewBehaviourScript : MonoBehaviour { ... 阅读详情

 关于for与foreach的争论,一直都存在。不过有些人只是拿array来测试,有些人只是拿arraylist测试,有些拿valuetype测试,有些拿引用类型测试,测试结果大相径庭,让我不知道相信哪个。于是今天自己测试了一下。

我没有做很全面的测试,只选择了其中四种,而且四种都是针对引用类型来测试的,而没有针对值类型测试。四种测试方法如下:

1、使用Array,也就是object[],比较for与foreach循环的耗时。
2、使用Array,但存放自定义类型,比较for与foreach循环的耗时。
3、使用ArrayList,存放简单的object类型,比较for与foreach循环的耗时。
4、使用ArrayList,存放自定义类型,比较for与foreach循环的耗时。

注1:我没有使用值类型来测试。foreach实际上是转换为了对枚举器的调用,而枚举器返回类型是object类型,所以值类型的数组在每次foreach访问的时候都会有一次装箱和一次拆箱的操作,这个会很大程度的影响遍历的性能。因此对值类型数组的遍历for的性能更好是有可能的。

注2:我使用的自定义类型的定义如下:

public class EntityBase : DictionaryBase, System.Runtime.Serialization.ISerializable, System.Runtime.Serialization.IDeserializationCallback

注3:我没有测试自定义的强类型集合或者其他实现了IList接口的类型比如DataTable,因为我觉得具体情况要取决于枚举器的实现,而实际上我们的强类型集合在继承了IList或者CollectionBase之后一般不会实现自定义的枚举器,即使实现了也是在.net的枚举器基础上做了表面上的修改而不会修改其核心算法,因此结果应该与ArrayList的测试结果一样。

注4:Dll以及Console都是在Debug模式测试的。

具体测试代码如下:

Dll中的测试方法:

    public class Test
    
{
        
public void ArrayTest()
        
{
            Console.WriteLine(
"ArrayTest");

            
// 初始化工作
            object[] arr = new object[100000];
            
for(int index = 0; index < 100000; index ++)
            
{
                arr[index] 
= new object();
            }

            
string str;

            
// 开始两种不同的循环
            DateTime start = DateTime.Now;
            
for(int index = 0; index < arr.Length; index ++)
            
{
                str 
= arr[index].ToString();
            }

            DateTime end 
= DateTime.Now;
            
foreach(object obj in arr)
            
{
                str 
= obj.ToString();
            }

            DateTime end2 
= DateTime.Now;

            TimeSpan span 
= end - start;
            Console.WriteLine(
"for: " + span.TotalMilliseconds.ToString());
            span 
= end2 - end;
            Console.WriteLine(
"foreach: " + span.TotalMilliseconds);
        }


        
public void MyObjectArrayTest()
        
{
            Console.WriteLine(
"MyObjectArrayTest");

            
// 初始化工作
            object[] arr = new object[100000];
            
for(int index = 0; index < 100000; index ++)
            
{
                arr[index] 
= new EntityBase();
            }

            
string str;

            
// 开始两种不同的循环
            DateTime start = DateTime.Now;
            
for(int index = 0; index < arr.Length; index ++)
            
{
                str 
= ((EntityBase)arr[index]).WriteXml(Formatting.Indented);
            }

            DateTime end 
= DateTime.Now;
            
// c# 有两种类型转换,foreach 语句中会自动执行 as 类型转换,为了尽量避免这种不一样的地方、
            
// 与 for 语句中执行同样的类型转换,没有使用 foreach(EntityBase obj in arr) 。
            foreach(object obj in arr)
            
{
                str 
= ((EntityBase)obj).WriteXml(Formatting.Indented);
            }

            DateTime end2 
= DateTime.Now;

            TimeSpan span 
= end - start;
            Console.WriteLine(
"for: " + span.TotalMilliseconds.ToString());
            span 
= end2 - end;
            Console.WriteLine(
"foreach: " + span.TotalMilliseconds);
        }


        
public void SimpleObjectListTest()
        
{
            Console.WriteLine(
"SimpleObjectListTest");

            
// 初始化工作
            ArrayList arr = new ArrayList();
            
for(int index = 0; index < 100000; index ++)
            
{
                arr.Add(
new object());
            }

            
string str;

            
// 开始两种不同的循环
            DateTime start = DateTime.Now;
            
for(int index = 0; index < arr.Count; index ++)
            
{
                str 
= arr[index].ToString();
            }

            DateTime end 
= DateTime.Now;
            
foreach(object obj in arr)
            
{
                str 
= obj.ToString();
            }

            DateTime end2 
= DateTime.Now;

            TimeSpan span 
= end - start;
            Console.WriteLine(
"for: " + span.TotalMilliseconds.ToString());
            span 
= end2 - end;
            Console.WriteLine(
"foreach: " + span.TotalMilliseconds);
        }


        
public void MyObjectListTest()
        
{
            Console.WriteLine(
"MyObjectListTest");

            
// 初始化工作
            ArrayList arr = new ArrayList();
            
for(int index = 0; index < 100000; index ++)
            
{
                arr.Add(
new EntityBase());
            }

            
string str;

            
// 开始两种不同的循环
            DateTime start = DateTime.Now;
            
for(int index = 0; index < arr.Count; index ++)
            
{
                str 
= ((EntityBase)arr[index]).WriteXml(Formatting.Indented);
            }

            DateTime end 
= DateTime.Now;
            
// c# 有两种类型转换,foreach 语句中会自动执行 as 类型转换,为了尽量避免这种不一样的地方、
            
// 与 for 语句中执行同样的类型转换,没有使用 foreach(EntityBase obj in arr) 。
            foreach(object obj in arr)
            
{
                str 
= ((EntityBase)obj).WriteXml(Formatting.Indented);
            }

            DateTime end2 
= DateTime.Now;

            TimeSpan span 
= end - start;
            Console.WriteLine(
"for: " + span.TotalMilliseconds.ToString());
            span 
= end2 - end;
            Console.WriteLine(
"foreach: " + span.TotalMilliseconds);
        }

    }

 

Console控制台的调用:

 

    class Class1
    
{
        
Main

        
public void DoMain(string cmd, string[] args)
        
{
            TestDll.Test test 
= new TestDll.Test();
            test.ArrayTest();
            test.MyObjectArrayTest();
            test.SimpleObjectListTest();
            test.MyObjectListTest();
        }

}

 

为了去掉其他如.net机制等造成的影响,编译完成后,我通过cmd.exe先执行了几遍调用,然后开始真正的测试。

 最终输出如下:

please input command:
test
ArrayTest
for:            15.625
foreach:        15.625
MyObjectArrayTest
for:            2250
foreach:        812.5
SimpleObjectListTest
for:            15.625
foreach:        31.25
MyObjectListTest
for:            2312.5
foreach:        859.375
please input command:
exit
will exit.

// 注:上面的调用是为了消除.net机制等引起的第一次执行可能引起的额外影响。下面真正开始测试。

E:/My Projects/ConsoleTester/bin/Debug>ConsoleTester.exe
please input command:
test
ArrayTest
for:            15.625
foreach:        15.625
MyObjectArrayTest
for:            2046.875
foreach:        812.5
SimpleObjectListTest
for:            31.25
foreach:        15.625
MyObjectListTest
for:            2187.5
foreach:        890.625
please input command:
test
ArrayTest
for:            31.25
foreach:        15.625
MyObjectArrayTest
for:            2187.5
foreach:        843.75
SimpleObjectListTest
for:            31.25
foreach:        15.625
MyObjectListTest
for:            2203.125
foreach:        859.375
please input command:
test
ArrayTest
for:            15.625
foreach:        15.625
MyObjectArrayTest
for:            2312.5
foreach:        812.5
SimpleObjectListTest
for:            31.25
foreach:        15.625
MyObjectListTest
for:            2375
foreach:        843.75
please input command:
test
ArrayTest
for:            15.625
foreach:        15.625
MyObjectArrayTest
for:            2359.375
foreach:        828.125
SimpleObjectListTest
for:            15.625
foreach:        15.625
MyObjectListTest
for:            2343.75
foreach:        843.75
please input command:
test
ArrayTest
for:            15.625
foreach:        31.25
MyObjectArrayTest
for:            2218.75
foreach:        812.5
SimpleObjectListTest
for:            15.625
foreach:        46.875
MyObjectListTest
for:            2359.375
foreach:        859.375
please input command:
test
ArrayTest
for:            15.625
foreach:        31.25
MyObjectArrayTest
for:            2171.875
foreach:        843.75
SimpleObjectListTest
for:            31.25
foreach:        15.625
MyObjectListTest
for:            2375
foreach:        859.375
please input command:
test
ArrayTest
for:            15.625
foreach:        31.25
MyObjectArrayTest
for:            2203.125
foreach:        812.5
SimpleObjectListTest
for:            31.25
foreach:        15.625
MyObjectListTest
for:            2343.75
foreach:        875
please input command:
test
ArrayTest
for:            15.625
foreach:        15.625
MyObjectArrayTest
for:            2250
foreach:        812.5
SimpleObjectListTest
for:            15.625
foreach:        31.25
MyObjectListTest
for:            2312.5
foreach:        859.375
please input command:
test
ArrayTest
for:            15.625
foreach:        15.625
MyObjectArrayTest
for:            2265.625
foreach:        828.125
SimpleObjectListTest
for:            15.625
foreach:        31.25
MyObjectListTest
for:            2343.75
foreach:        859.375
please input command:
test
ArrayTest
for:            15.625
foreach:        15.625
MyObjectArrayTest
for:            2250
foreach:        843.75
SimpleObjectListTest
for:            15.625
foreach:        31.25
MyObjectListTest
for:            2406.25
foreach:        843.75
please input command:

从上面的结果来看,测试结果有些动荡,不过我们通过大多数情况,就可以得到一些一般性结论。具体结论我也就不说了。虽然测试的覆盖面并不是很全,不过个人觉得至少代表了我们实际应用中的大部分情况。

测试完毕。

顺便贴下Dll反编译的结果:(有人说反编译发现foreach都变成了for,事实好像不是这样的)

 

public void ArrayTest()
{
      
string text1;
      Console.WriteLine(
"ArrayTest");
      
object[] objArray1 = new object[0x186a0];
      
for (int num1 = 0; num1 < 0x186a0; num1++)
      
{
            objArray1[num1] 
= new object();
      }

      DateTime time1 
= DateTime.Now;
      
for (int num2 = 0; num2 < objArray1.Length; num2++)
      
{
            text1 
= objArray1[num2].ToString();
      }

      DateTime time2 
= DateTime.Now;
      
foreach (object obj1 in objArray1)
      
{
            text1 
= obj1.ToString();
      }

      DateTime time3 
= DateTime.Now;
      TimeSpan span1 
= (TimeSpan) (time2 - time1);
      Console.WriteLine(
"for: " + span1.TotalMilliseconds.ToString());
      span1 
= (TimeSpan) (time3 - time2);
      Console.WriteLine(
"foreach: " + span1.TotalMilliseconds);
}



public void MyObjectArrayTest()
{
      
string text1;
      Console.WriteLine(
"MyObjectArrayTest");
      
object[] objArray1 = new object[0x186a0];
      
for (int num1 = 0; num1 < 0x186a0; num1++)
      
{
            objArray1[num1] 
= new EntityBase();
      }

      DateTime time1 
= DateTime.Now;
      
for (int num2 = 0; num2 < objArray1.Length; num2++)
      
{
            text1 
= ((EntityBase) objArray1[num2]).WriteXml(Formatting.Indented);
      }

      DateTime time2 
= DateTime.Now;
      
foreach (object obj1 in objArray1)
      
{
            text1 
= ((EntityBase) obj1).WriteXml(Formatting.Indented);
      }

      DateTime time3 
= DateTime.Now;
      TimeSpan span1 
= (TimeSpan) (time2 - time1);
      Console.WriteLine(
"for: " + span1.TotalMilliseconds.ToString());
      span1 
= (TimeSpan) (time3 - time2);
      Console.WriteLine(
"foreach: " + span1.TotalMilliseconds);
}


 
public void MyObjectListTest()
{
      
string text1;
      Console.WriteLine(
"MyObjectListTest");
      ArrayList list1 
= new ArrayList();
      
for (int num1 = 0; num1 < 0x186a0; num1++)
      
{
            list1.Add(
new EntityBase());
      }

      DateTime time1 
= DateTime.Now;
      
for (int num2 = 0; num2 < list1.Count; num2++)
      
{
            text1 
= ((EntityBase) list1[num2]).WriteXml(Formatting.Indented);
      }

      DateTime time2 
= DateTime.Now;
      
foreach (object obj1 in list1)
      
{
            text1 
= ((EntityBase) obj1).WriteXml(Formatting.Indented);
      }

      DateTime time3 
= DateTime.Now;
      TimeSpan span1 
= (TimeSpan) (time2 - time1);
      Console.WriteLine(
"for: " + span1.TotalMilliseconds.ToString());
      span1 
= (TimeSpan) (time3 - time2);
      Console.WriteLine(
"foreach: " + span1.TotalMilliseconds);
}


public void SimpleObjectListTest()
{
      
string text1;
      Console.WriteLine(
"SimpleObjectListTest");
      ArrayList list1 
= new ArrayList();
      
for (int num1 = 0; num1 < 0x186a0; num1++)
      
{
            list1.Add(
new object());
      }

      DateTime time1 
= DateTime.Now;
      
for (int num2 = 0; num2 < list1.Count; num2++)
      
{
            text1 
= list1[num2].ToString();
      }

      DateTime time2 
= DateTime.Now;
      
foreach (object obj1 in list1)
      
{
            text1 
= obj1.ToString();
      }

      DateTime time3 
= DateTime.Now;
      TimeSpan span1 
= (TimeSpan) (time2 - time1);
      Console.WriteLine(
"for: " + span1.TotalMilliseconds.ToString());
      span1 
= (TimeSpan) (time3 - time2);
      Console.WriteLine(
"foreach: " + span1.TotalMilliseconds);
}


 

相关推荐

for,foreach,Parallel.for与Parallel.foreach相关性能分析

for,foreach,Parallel.for与Parallel.foreach相关性能分析业务背景parallel并发编程相关介绍概念优化代码块优化分析使用工具使用方法测试计划测试场景测试结果For循环Foreach循环Parallel.For循环Parallel.Foreach循环数据整理数据分析与总结分析总结名词解释 业务背景 1.需要从ES表中获取大量数据,需要一次获取23张表中数据内容,其中涵盖了订单数据,通信连接数据,状态信息数据,测量数据以及配置信息等数据的获取,内部每次获取均需要进行相应接

cheng_samll_baby的博客 760

【喵叔闲扯】--简聊C# 中for和foreach的性能

在C#中,for和foreach是两种常用的循环结构,用于迭代集合中的元素。尽管它们在功能上相似,但它们在性能、空间效率和垃圾回收(GC)方面有一些区别。在下面的讨论中,我将详细解释这些方面,并提供相关的代码示例。1. 时间效率:for循环通常比foreach循环具有更高的时间效率。这是因为for循环直接通过索引来访问集合中的元素,而foreach循环需要获取一个迭代器并逐个访问元素。下面是一个比...

喵叔 489

C# foreach循环:从0到大师,性能提升之谜

高效利用C#的foreach循环,是一门平衡艺术:在简洁性、性能与可维护性间找到最佳契合点。理解其工作原理,合理选择优化策略,让你的代码既优雅又高效。记住,优化应基于测量和实际需求,避免无谓的“微观优化”。现在,你已握有钥匙,去开启数据处理的新篇章吧!

java专栏 888

C# For、Foreach性能比较

例如:在update中,两句代码都用foreach遍历同一个字典,则只有第一个foreach有gc产生。一直听说foreach会有gc产生,有说.net3.5之前有,.net4则修复,一直没有测试,今天测试记录一下。使用foreach循环遍历其中的key或values,则会分别产生额外GC,同样只只产生一次。for循环遍历字典,同样的,如果两句代码遍历同一个字典。GC产生的大小,与字典存的数据结构有关,存int的GC 就小于存Class GC。for循环、 foreach循环,第一次都会产生GC。

Sevol_Y 1354

iOS中.obj、.usdz、.dae和.scn格式之间的转化(思路清晰版)

作者最近在写项目的过程中遇到了一些3d模型格式问题,故写下这篇文章记录一下解决问题的过程。

yueliangmua的博客 5586

【Qt】Window环境下搭建Qt6、MSVC2022开发环境(无需提前安装Visual Studio)

本文介绍 Windows 环境下无需安装 Visual Studio,搭建 Qt6 与 MSVC2022 开发环境的方法,以节省磁盘空间。核心步骤包括:用中科大镜像提速 Qt6 在线安装,需勾选 Qt Creator 17.0.1、MSVC 2022 x64 等组件;配置环境变量,添加 mingw_64、msvc2022_64 及 Qt Creator 的二进制目录;安装 MSVC 2022 编译器与 Windows 10 SDK 并记录版本;配置 Qt Creator 构建套件,可选设置 vcvarsal

油炸自行车的博客 2926

for和foreach性能比较

for和foreach性能比较 在很多情况下for和foreach具有同样的功能,选择for还是foreach很多人可能都是看自己的喜好,本测试试图通过 来真是测试数据来比较他们的执行效率。希望能给大家对他们的时候带来一些帮助。 测试环境:      硬件环境:   PIII800 + CPU456    软件环境:   VisualStudio.Net  + C#测试用例:   

stableboy的Blog 1253

车载监控系统升级指南:如何用XS9950A替换TP9950实现高清视频解码(附配置代码)

本文提供了从TP9950升级至XS9950A车载视频解码芯片的完整实战指南。详细解析了硬件设计调整、PCB布局要点,并重点分享了通过I2C配置寄存器实现高清HDCCTV视频解码与同轴音频集成的软件驱动代码与调试技巧,助力工程师平滑完成系统升级。

weixin_29268637的博客 371

foreach vs for循环:大数据量下的性能对比实验

通过这次测试,我深刻认识到foreach和for循环在不同场景下的性能差异。选择哪种迭代方式不仅要考虑语言特性,还要结合数据结构和具体需求。希望我的测试结果和建议能够帮助大家在开发中做出更优的选择。

SilvermistFalcon19的博客 676

Aurora 8B/10B IP核介绍 —— Xilinx 技术文档Pg046

一、概述该IP核与用户接口之间支持AXI4-Stream协议,且基于ZYNQ SOC、A7、K7、V7以及UltraScale、UltraScale+系列FPGA的高速收发器(the high-speed serial transceivers)进行实现。多达 16 个连续绑定4 个连续绑定的 GTP 收发器framingstreaming以及全双工或单工加扰消扰CRC校验热插拔Aurora 8B/10B核心(图1-1)是一种可扩展的、轻量级的、用于高速串行通信的链路层协议;

qq_32147275的博客 1640

Python爬虫实战:5分钟搞定大众点评评论数据抓取(附完整代码)

本文详细介绍了使用Python爬虫高效获取大众点评评论数据的5个关键技巧,包括环境配置、智能页面解析、反反爬策略、数据存储与容错设计以及性能优化。通过实战案例和完整代码,帮助开发者快速掌握文本挖掘技术,适用于市场分析和商业决策。

weixin_30660027的博客 290

改进你的c#代码的5个技巧

在本文中,我将向你展示c#编程的5个最佳实践。我从日常编程经验中学到了这些实践。我在release模式下测试了所有的代码,并在开发环境稳定后进行了截屏。我想你会喜欢这些建议的。01—在使用数据类型之前选择它对于许多类型,我们宁愿不决定在日常编程生活中使用什么数据类型。就在几个月前,我也是其中之一。但是当我开始学习编程中的最佳实践以提高代码性能时,我了解到了错误的数据类型是...

zls365365的博客 101

ESP8266-Arduino网络编程实例-异步TCP客户端

本次实例将使用ESPAsyncTCP库实现一个简单的客户端。

视觉与物联智能 1741

深度理解 C# 中的 for 和 foreach

很多人认为,在C#中 `for` 和 `foreach` 功能是一样的,`foreach` 顶多就是比 `for` 要更方便一些。但是实际上真的是这样吗?在本文中,让我们通过一个实例来理解其底层的工作原理。

郝伟老师的博客——大数据、并行计算与人工智能时代 6502

LLM Wiki 的完整输入体系:LLM Wiki极简实战

LLM Wiki 的输入分为**四大类**,覆盖从"原始知识注入"到"系统行为控制"的全流程,所有输入都遵循"**原始资料不可变,规则可迭代,人类反馈闭环**"的核心原则。

ZhangJiqun&191cm&85kg 322

YOLOv12改进策略【Head】| ASFF 自适应空间特征融合模块,改进检测头Detect_ASFF

在目标检测中,处理多尺度物体是一个具有挑战性的问题。虽然特征金字塔或多级特征塔是解决多尺度问题的常用方法,但在单阶段检测器中,不同尺度特征之间的不一致性限制了其性能提升。为了解决这个问题,提出了自适应空间特征融合(ASFF)模块。

Limiiiing的博客 1171

C#中 for与foreach的效率比较

在很多情况下for和foreach具有同样的功能,选择for还是foreach很多人可能都是看自己的喜好,本测试试图通过 来真是测试数据来比较他们的执行效率。希望能给大家对他们的时候带来一些帮助。 测试环境:      硬件环境:   PIII800 + CPU456     软件环境:   VisualStudio.Net  + C# 测试用例:     利用结果集来存放记录,初

吴正清的专栏 1万+

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

C#中的For与Foreach循环:一场性能对话与实战解析

然而,对于实现了高效迭代器接口(如IEnumerator)的集合,如List,foreach循环的实际性能可能与for循环相当甚至更好,因为它避免了手动管理索引的开销。然而,在处理非连续内存结构如LinkedList时,for循环需要显式遍历链接节点,此时性能可能不如foreach,因为foreach可以利用集合自身提供的迭代器接口进行高效遍历。对于大多数内置或第三方集合类,尤其是那些已经优化了迭代器的类,foreach循环提供了更好的代码可读性和维护性,同时性能损失极小,优先推荐使用。

chujian_a的博客 3164

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

for循环与foreach性能比较

在很多情况下for和foreach具有同样的功能,选择for还是foreach很多人可能都是看自己的喜好,本测试试图通过来真是测试数据来比较他们的执行效率。希望能给大家对他们的时候带来一些帮助。测试环境: 硬件环境: PIII800 + 1024MB 软件环境: Windows 2000 Advance Server, VisualStudio 2003/C#, Framework 1.1 测

dahaizhiliang的专栏 5728

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

C# 中 for和foreach 性能比较,提高编程性能

在很多情况下for和foreach具有同样的功能,选择for还是foreach很多人可能都是看自己的喜好,本测试试图通过 来真是测试数据来比较他们的执行效率。希望能给大家对他们的时候带来一些帮助。 测试环境: 硬件环境: PIII800 + CPU456 软件环境: VisualStudio.Net + C# 测试用例: 利用结果集来存放记录,初始化对结果集添加记录 分别对记录数

c135205的专栏 1861

C# 中 for和foreach 性能比较,提高编程性能 (转贴)

在很多情况下for和foreach具有同样的功能,选择for还是foreach很多人可能都是看自己的喜好,本测试试图通过 来真是测试数据来比较他们的执行效率。希望能给大家对他们的时候带来一些帮助。 测试环境:      硬件环境:   PIII800 + CPU456    软件环境:   VisualStudio.Net  + C#测试用例:    利用结果集来存放记录,初始化对结果集添

赛跑的专栏 1482

C#并行编程-Parallel

C#并行编程-Parallel 原文:C#并行编程-Parallel菜鸟学习并行编程,参考《C#并行编程高级教程.PDF》,如有错误,欢迎指正。 TPL中引入了一个新命名空间System.Threading.Tasks,在该命名空间下Task是主类,表示一个类的异步的并发的操作,创建并行代码的时候不一定要直接使用Task类,在某些情况下...

weixin_30625691的博客 238

for、while、foreach性能比较

 一般情况下,遍历一个数组有三种方法,for、while、foreach。其中最简单方便的是foreach。那么它们在操作和性能上存在什么差别,通常使用那种方法比较好。下面先让我们来测试一下共同遍历一个有50000个下标的一维数组所耗的时间:测试平台:CPU:P-M 725内存:512M硬盘:40G 5400转OS:Windows XP SP2WEB:apache 2.0.54  php5.0.4

phphot 2288

C# 中for和foreach的性能

在下面的讨论中,我将详细解释这些方面,并提供相关的代码示例。需要注意的是,性能和效率的实际差异可能会受到很多因素的影响,包括集合的大小、迭代次数、代码的优化程度等。然而,需要注意的是,如果在循环内部创建了大量的临时对象或使用了需要及时释放的资源,那么在循环内部手动释放这些对象或资源可能会更加有效。这样,在每次迭代结束后,资源将会被及时释放,而不必等待垃圾回收器的干预。循环,当它们完成迭代后,垃圾回收器会根据需要回收不再使用的对象。循环,它们只是迭代集合中的元素,而不会增加额外的内存负担。

喵叔 1897
上一篇: WebCombo的客户端对象模型
下一篇: 同时支持三种事件模型的javascript
libraworm
博客等级 码龄24年 3粉丝 24原创
评论 9
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值