从字符串变量到整数列表的可选ID的性能

问题描述 投票:1回答:4

我正在使用ListBox中的SelectListItem从剃刀视图中将由;分隔的模型ID返回到字符串属性中。

我想从字符串属性中复制每个ID,并将每个ID分配给一个List<int> ID,在这里我可以使用每个ID来获取有关具有该ID的模型的更多详细信息。

为了解决主要问题,我做了以下逻辑准备。但是我觉得我可能会降低性能。

//ID returned from ListBoxFor
            string receivedIDs = "1020;8922;333;14;58;446;70;98";

            List<int> numbers = new List<int>();
            List<string> subStr = new List<string>();

            int pos = receivedIDs.IndexOf(";");
            int i = 0;
            int prevPos = pos;

            while (pos > -1)
            {
                string tempStr = "";
                if(i == 0)//Start
                {
                    tempStr = receivedIDs.Substring(0, pos);
                }
                else
                {
                    tempStr = receivedIDs.Substring(prevPos + 1, (pos - prevPos-1));
                }

                subStr.Add(tempStr);                
                if(i > 0)
                {
                    prevPos = pos;
                }
                pos = receivedIDs.IndexOf(";", pos + 1);
                i++;
                if(pos == -1)//Last Value
                {
                    tempStr = receivedIDs.Substring(prevPos + 1);
                    subStr.Add(tempStr);
                }        
            }            
            //Coverting string values to int
            foreach(string str in subStr)
            {
                numbers.Add(Int16.Parse(str));
            }
            //Now i can check each ID in my Database Table
c# .net performance
4个回答
1
投票

我认为您正在尝试将receivedIDsstring转换为List<int>

在这种情况下,这是一种快速的方法:

string receivedIDs = "1020;8922;333;14;58;446;70;98";
List<int> numbers = receivedIDs.Split(";").Select(int.Parse).ToList(); 

我们正在做的是:

  1. 使用string在每个;字符处分割输入Split(";")
  2. 使用int将每个数字解析为Select(int.Parse)。这意味着您从上一步中获取每个令牌,并在其上执行int.Parse
  3. 使用List<int>将其转换为ToList()

请注意,您需要此using System.Linq;


0
投票

您可以轻松完成:

string receivedIDs = "1020;8922;333;14;58;446;70;98";
List<int> numbers = new List<int>();
string[] idFromString = receivedIDs.Split(';');
foreach(string s in idFromString)
{
   numbers.Add(int.Parse(s));
}

0
投票
string receivedIDs = "1020;8922;333;14;58;446;70;98";
var numbers = receivedIDs.Split(';').Select(id => Int16.Parse(id)).ToList();

0
投票

这是一个很好的例子,过早优化可能会浪费时间。

很容易想到这个问题是:

哪个更快,一个简单的Split(';')或自定义的优化分析代码?

但是更好的问题是:

编写此代码的不同方式是否会引起用户明显的性能差异?

您通常可以编写一些“聪明的”代码来真正快速或有效地完成工作,但这需要花费额外的时间来编写,并且通常很难理解和调试。如果事实证明性能差异很小,则最好始终在简单易读的代码方面犯错,即使它并非完全理想。

因此,您如何知道性能差异何时足够大而又重要呢?通过基准测试!

我在一个空的控制台应用程序中安装了Benchmark.NET,并针对约5000个数字针对Split(';')测试了您的解析循环:

using System;
using System.Collections.Generic;
using System.Linq;
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Running;

namespace BenchmarkDotNetTester
{
    namespace MyBenchmarks
    {
        public class ParseDelimitedStringToListOfInts
        {
            private const string inputData = "1020;8922;333;14;58;446;70;98;1272;2193;3238;2340;7779;4708;5211;2156;4867;8614;2134;2364;9532;8810;5565;9263;5243;5579;6247;6549;452;6101;9304;4228;3329;889;9797;8069;8096;8669;516;3983;5855;8256;5462;9453;3222;5031;3672;2597;8098;9303;1748;4616;8835;4206;4430;6853;318;6723;7612;7758;1962;160;4780;8161;2563;4276;7196;6999;3265;9444;3458;8570;7385;8377;4966;7298;619;8934;4309;2675;5633;7739;7852;9655;7960;3620;2316;9097;8389;7158;4087;6128;8746;7077;2054;9657;9665;6438;8712;8403;3747;5299;8030;447;2635;9067;4282;3884;1759;6582;8404;9227;1319;1895;2222;8916;4188;5683;3266;5541;6253;4984;704;1008;7995;9040;6667;466;7641;3385;8325;3085;6995;7679;7468;6982;6745;4248;3618;5174;7489;2910;2021;8554;108;4966;1551;8383;1586;7742;7637;435;2203;9595;8410;7321;8184;3640;2473;8297;4185;1793;9196;7372;2051;9848;4462;4211;9654;8597;1129;2047;5312;8076;1021;6237;7413;5051;500;1397;352;5088;6880;2205;8834;6906;7607;3614;7250;5626;9049;5473;7835;4408;6475;472;1991;9707;4846;7447;8189;6681;2555;2654;2469;1789;9066;3869;5321;2217;1976;7983;2022;337;5333;8040;8774;1483;6037;6324;1188;981;1426;9681;554;9900;2059;9445;9104;7504;8113;1569;3164;8511;7645;9724;6995;4056;5451;8606;7072;9433;5765;9770;5086;3190;8812;6819;3683;588;8496;7196;3060;200;473;5591;2484;4216;5155;9834;3635;4586;3110;9264;9387;5749;7935;5677;6453;9275;169;1717;8281;7150;5606;3444;7779;8425;1255;445;1828;9862;4986;7593;5272;289;8480;2932;794;5583;3810;6849;7818;6706;3063;5885;1662;152;2009;1123;1891;4192;4188;8773;4543;6440;9515;3055;4722;7623;9722;831;7574;4771;872;1939;4794;7347;7380;6000;6344;5688;6178;7003;8437;2805;8002;2560;809;5464;6314;9340;2845;8036;3943;281;6783;9496;6207;8269;165;633;6665;6157;752;3621;9300;760;6314;7211;8672;311;1979;7119;9536;1377;5399;2514;965;9055;6918;890;8052;168;2626;6772;2373;7055;5824;7016;5073;2399;8003;7865;8004;7512;270;3131;5670;9743;6718;6899;4547;7271;8344;660;8648;7221;6439;1896;5481;4242;1934;624;5299;9750;782;2964;5189;5869;4896;4123;4114;1589;8232;6346;3542;1346;1036;5472;1784;1343;9941;3217;7458;6554;6032;7788;9582;72;1134;1784;558;7578;9148;2003;7203;8875;912;3134;4492;429;8793;1402;3559;5826;1218;9035;6721;1938;9956;7846;5136;4311;3516;890;7026;67;9858;8800;5389;3398;5724;2845;3786;8036;9118;5595;4729;6773;8211;210;6927;1197;3588;6983;8429;2496;2020;9764;8350;6685;6359;9321;1922;3462;3181;625;551;3943;6797;3634;9033;6895;3626;1944;4366;4097;9617;7502;663;8358;5066;8291;6859;7193;4100;4178;8015;310;7273;6712;6026;6984;3198;8804;7766;3246;6143;382;1662;6758;6061;3514;8933;1875;3458;6306;4306;4037;7947;9529;4107;6385;8908;9991;2726;9768;2314;3727;1379;2639;4533;4779;4659;8102;1097;2688;980;2508;6236;8312;1772;8112;2136;862;3608;7320;4545;2770;34;2864;2337;8051;9170;6378;2232;2273;2425;868;3646;1869;4875;6663;8198;7723;9034;8447;4835;986;7252;9382;1561;6395;7302;9662;7047;7612;8833;6429;7336;5803;8584;5224;8757;3495;9823;6774;826;9051;9894;8819;6088;7414;7688;689;8184;2428;5346;367;9645;5505;5287;1970;3877;4426;7843;2137;8238;9902;4941;2579;9188;1350;8195;3458;3514;4437;39;576;526;4570;9953;466;4723;109;1747;2013;8036;8209;3349;7861;6708;6927;7034;1015;9259;1792;1638;9868;2587;2672;4627;1367;370;5586;2669;4539;6604;6653;8031;2805;3666;3859;7537;7073;1643;8514;9392;9616;6584;4516;8323;7023;5904;7709;3193;4893;7423;9172;2520;4128;9396;6481;6725;9759;6801;4506;7872;1361;5734;9501;7104;8276;2467;9913;7774;9677;1884;328;7592;8932;6414;7142;5980;5412;3910;1171;994;3121;5347;5271;5684;1124;4921;160;7875;8234;1137;2397;7593;2297;200;9808;4124;8899;2132;8131;2108;166;7306;4660;2612;8381;5468;8758;7352;4191;8846;3307;6011;6226;5354;4776;3187;1924;1863;3050;2599;742;8760;1170;543;6362;1628;4899;6767;3074;1842;9698;7416;2164;6008;3784;6092;3707;3592;368;3579;6444;6173;40;8030;8908;6620;491;5789;2501;3509;5512;5830;8874;7278;9146;4784;4189;9955;3957;8798;6121;4543;6867;2160;9874;104;9195;8681;211;5066;1610;607;8089;4960;745;4262;675;5244;4712;8250;9595;4846;867;9909;1950;9081;1697;2080;4005;2145;2119;2254;484;6058;7805;2487;3713;2187;8866;7510;9586;3919;651;5740;6050;308;6970;2649;2085;8486;9347;9567;9370;3457;452;6368;8941;2318;5544;5476;625;2336;7202;8643;2318;4754;5488;2807;5307;8956;1606;4358;3947;5057;1231;665;7142;1031;1378;6954;9026;8481;8081;5815;4186;7015;7556;6923;3679;5279;3978;6844;712;1622;4151;4446;5227;6802;2898;5785;4161;9444;6436;8102;6157;7113;4206;9526;250;9271;7664;3835;5066;2004;968;1523;9413;4951;3797;9876;4613;639;4623;347;7048;5499;2756;6934;4217;7328;7894;8304;2543;8393;4066;100;6642;500;5477;4200;258;7414;5900;2595;9960;533;9929;502;1615;2789;6654;5180;6541;4761;8560;236;7603;3054;3871;9274;1883;8184;7249;1320;8019;4914;232;1716;1001;6918;9356;1588;6275;7855;5932;6919;610;8215;4506;6114;9006;1879;516;96;4770;3282;4901;1426;3534;2370;5253;2763;2343;15;1533;8890;1362;5017;5758;734;4973;7580;3968;4620;2415;3612;1654;6550;6810;2222;1857;7347;3205;8353;4619;725;478;1457;7053;6408;8053;1919;6598;2657;7609;6014;5791;2003;4889;712;5560;8528;5745;5691;489;6851;8608;5854;1353;9734;1773;7540;9586;8676;832;1623;358;1753;7522;3521;4142;788;5987;2280;3592;276;8822;5800;145;1142;3493;48;2148;8419;6493;750;8686;6382;6839;8762;3077;1527;5419;2063;7127;9284;9780;5971;5281;1687;799;4142;5495;9560;341;6565;7176;8505;3338;4170;9243;2691;6150;6947;9987;8026;5805;4823;6763;9127;3784;2666;1190;3615;5205;2241;9507;4744;7805;7947;263;4815;8916;6829;9271;8939;2859;5515;5538;7299;6254;8010;7593;2694;6471;7538;9470;5100;3169;3362;739;9746;3325;6566;4455;832;2889;3319;770;4895;2502;2539;4975;6242;4518;5911;3839;7045;3725;5149;6321;8753;4732;1623;3364;6757;8207;5812;5026;7911;4147;7131;2321;5262;7711;6377;4026;6753;9993;4636;4355;9881;2998;3518;7773;2009;1643;8412;2931;59;8045;1534;2070;8197;2857;9476;8640;8365;6309;4882;3388;5131;2155;627;2710;4113;7931;7642;9532;2256;5939;3539;2446;63;2459;9324;7849;2657;7383;1210;9339;6422;9649;2813;3017;1850;1609;4224;8867;8029;899;5581;4243;5914;135;1757;6712;8883;4132;5666;9429;5012;6076;6710;6373;8854;6426;5079;7791;4654;3671;7485;9988;6428;3484;6159;673;1273;74;7308;6056;709;8170;6844;7177;4437;632;166;952;7573;9078;5143;7326;429;4902;9425;5733;6504;9747;3456;2773;8087;9314;7185;6599;6866;1207;3867;3894;179;6413;1096;5163;6050;5613;1007;2926;767;8707;5007;9387;9836;1581;5630;657;4475;967;6831;6964;9347;3137;7620;9709;371;6704;804;575;7950;6906;1371;5458;8744;9343;7854;1570;9139;6985;1452;8333;8407;8526;8579;3689;2978;5401;7391;567;4285;6763;3800;1348;7053;2195;1943;5972;7321;5237;7847;1863;5152;7139;6622;9804;9732;2238;4144;6057;6267;6650;9365;7019;4250;8343;4142;704;5709;8171;2308;3867;5991;8788;2291;8991;3907;9604;2726;6870;4164;2114;3116;3708;9758;8640;4346;1852;4746;9736;6374;8074;9146;4317;16;4857;3748;4943;4137;8762;8170;3428;5225;9371;9705;4767;4996;1988;3712;1513;9123;1611;7906;5388;5301;1509;7556;2274;1218;4974;8232;9710;6154;4840;4609;4004;5203;4930;8118;3726;8965;9913;1181;3707;2606;238;8;5924;742;6468;9012;8329;7357;9509;1509;3784;3619;6328;2764;9616;8480;6919;3434;1194;5379;4523;3221;8757;5238;9629;801;6493;1081;1915;2440;6521;2168;8330;1280;5621;3908;318;8838;8132;141;200;6398;6287;1962;7962;4080;1480;3818;1149;7158;9989;9557;4675;8634;4655;2271;6431;4068;5189;2919;5467;5593;2195;3319;6532;3801;8363;4035;6645;4631;1932;6292;9659;6392;5773;7150;8765;9585;3944;915;4615;2925;2885;2899;3296;1865;2102;6759;2581;3616;9013;7880;968;8328;614;1021;938;3574;7024;7086;3532;9475;9833;241;4286;9321;1145;5179;3211;3383;9667;7561;2932;9998;6062;9540;8369;2638;11;2169;5216;1735;4562;2122;8172;8024;8655;6627;7204;8223;1062;8726;810;9265;3866;9402;6145;5211;9161;7503;1284;5117;2530;444;6091;8340;7701;4051;252;4671;9694;8248;460;3600;4613;2962;2916;6532;910;271;4912;2680;2721;8773;6819;9001;6431;5462;6611;6656;9340;512;564;1621;6839;5052;8080;8859;1241;6290;3187;662;1046;7065;7268;8498;7020;1001;7880;7834;680;5289;2186;9993;3500;8713;2300;4826;8377;9806;1389;1222;4380;3037;4641;975;7920;1230;5011;547;854;1855;7928;546;7155;2440;3271;2002;3865;2924;3907;7881;9719;1272;2342;2056;5627;554;1523;612;1823;1442;1392;3168;2223;715;8771;1081;2312;8685;4015;4714;4877;9728;8940;5934;6884;9024;1816;6397;7376;4221;1380;2296;2875;3822;3201;1886;2122;3239;5244;5244;4866;9366;6300;1410;8985;8783;7524;1945;6054;6377;3649;5691;5092;6532;151;8734;7095;178;6945;5468;2594;7016;1160;1373;6935;5182;767;4902;7865;5479;6561;9600;5119;5157;6776;3788;1440;5221;3243;6089;8545;8880;8846;9432;3381;464;8239;2403;7373;1009;7521;3038;3298;2659;682;7674;4778;1887;4119;4277;706;5189;5767;9153;2290;3751;328;4241;136;6153;2630;1858;8058;9677;6162;5283;3671;3353;8931;4159;324;490;8644;2888;1323;6136;6760;5400;3588;2939;1114;388;3499;8995;7152;9685;2077;1660;7144;238;1601;8916;5415;5698;2992;9513;7413;1683;4430;9347;8746;7536;8635;2476;4001;7229;3741;3068;3600;5095;4601;478;4339;2130;161;4970;1604;9009;8810;3317;2659;3113;4607;3319;5659;2017;8498;5047;9382;7914;4434;1024;1235;2506;5984;1910;4769;649;9341;8135;6762;7486;8921;1300;6007;5581;8356;9360;194;8282;9427;1634;7517;7536;1544;1014;6176;3133;9859;8259;1323;9074;6788;3657;9607;996;3457;2620;3461;2671;5412;2335;5383;7269;7516;3420;223;4342;8960;8161;7531;5147;6003;6583;9325;1705;8473;5014;6833;157;3120;6556;2563;7678;4547;7222;4293;1331;6790;2074;6717;6565;707;5097;4535;3476;5143;2099;8109;1501;5737;9824;8494;6473;1527;6443;65;7035;3261;6648;1092;9281;315;2488;6944;1268;9482;9458;9021;5939;4653;27;2951;3307;8909;7345;5172;8195;4688;9805;9463;9945;836;4043;2167;9334;1481;2183;4332;1506;1194;1980;7136;735;4961;5711;7791;5369;2823;9239;5743;4931;6884;8433;6514;3790;9005;2466;1816;2853;3884;9987;890;1083;997;6414;4509;4355;2106;7569;4733;4024;2839;7962;4199;5289;9921;9148;1791;9072;9306;6059;9699;8843;127;5127;8836;729;9578;5835;6027;4420;904;3866;9941;6251;3919;1166;5607;1100;463;4940;2971;2691;5528;6600;7105;2139;8730;2034;5734;5124;6142;5159;3033;812;1055;3594;6176;5028;2137;7703;1291;3449;6884;9115;6147;9323;8738;3959;9993;8486;4961;5656;9980;3733;6498;2315;5206;1182;8466;2806;7626;6856;8499;2005;6482;8191;278;1674;8314;6500;9917;330;6897;4540;3484;7896;4806;5282;4631;4897;7252;4061;9004;5359;864;571;4332;380;1173;8450;8689;7013;3885;2618;3958;3381;3286;7546;743;8446;1373;524;78;3801;6598;9926;5519;7715;7059;3978;4674;9998;1670;7997;6211;862;5010;3388;8714;1748;2673;8558;9895;4600;5805;9682;7144;7017;2810;1215;9702;659;3622;1705;1748;9897;7353;8412;2192;3186;6503;5841;7345;2954;3078;7290;7717;2835;6906;8929;9831;932;1092;8317;9545;4605;3382;5417;1701;895;3845;4378;7818;3468;7741;9578;8701;3696;4539;6325;5816;8011;4510;6796;3581;8707;1353;1702;988;6264;1370;1913;8396;7268;1141;3842;644;9834;6829;3363;8240;8175;6186;887;2003;8590;6963;9789;7548;3814;911;849;5068;9860;3599;7120;7873;9452;6536;276;9525;1952;905;386;8168;1038;6725;6351;2197;1025;6827;3301;5376;806;1209;1686;421;3880;8772;1528;9411;6769;449;1879;1653;9801;4308;5530;6698;9019;9433;7789;2558;6035;6714;7211;8262;7838;7966;9250;3962;8189;4524;3894;8201;626;843;6368;4297;2631;3761;8745;5400;8795;78;7842;9661;812;9460;2036;1811;5097;5682;728;6264;682;5994;6578;3096;5489;2964;7687;3947;6396;6862;2642;9950;1585;4436;7633;9022;6458;753;3339;1861;6690;8228;3281;3956;7727;8577;1238;5384;8908;2604;4326;6195;8268;3572;5895;4415;307;1915;624;3568;5865;4982;3090;4593;8497;3990;2776;4017;7198;1762;7540;2170;2954;8917;517;1136;8414;4157;1244;8496;2974;5851;1661;9629;9741;7927;5487;551;1719;1004;3466;5829;4281;4501;9416;2831;5538;5199;2689;3478;6736;6989;7385;8945;9135;629;6859;7996;2080;3531;26;5674;7951;7664;8279;1339;827;1102;267;6830;8908;5213;7046;829;957;7797;1932;3667;3730;6257;1523;3361;4363;2529;1179;103;9335;6451;2186;1188;5590;4939;5932;9976;1897;3730;6122;9082;4467;3364;5527;3104;4520;8038;1129;4697;2831;9723;8854;8639;6033;9856;409;7553;2505;1723;5824;624;8982;142;872;11;2249;1872;1495;1988;6166;941;8281;5964;8616;4477;1402;3018;5607;4562;6630;9877;610;3900;1537;4965;8213;2020;8771;7989;1538;2196;7009;521;5202;6979;2581;5340;7596;1154;4939;1822;8586;6707;1854;8769;1873;9264;180;6852;4463;3661;4222;9316;7265;3006;6280;1063;8347;5019;5729;9783;8330;2590;6083;5578;3291;1866;8522;6608;9975;3338;5577;7930;858;1206;851;8889;712;6767;9712;4692;7788;8113;1590;9541;7417;1798;2195;2231;8149;9028;3489;936;7452;5272;6898;2667;6724;4462;101;4705;5806;7099;2316;4497;8312;1181;7607;5580;4474;611;1593;1412;8745;2388;236;1999;9549;1021;5321;1198;8529;4774;8034;2672;1745;8324;2612;8870;6991;3199;7607;3610;4580;2149;8019;2673;9329;947;2465;8822;6349;8849;8731;4809;714;2228;3981;9339;835;6301;9036;4204;732;4546;1589;8139;1005;9485;2653;254;6858;529;1791;7594;2648;1348;2715;5933;7925;5930;9037;3201;3261;1144;8000;9768;3494;8693;6048;1311;8253;9212;436;2311;624;8207;5904;8421;1875;316;3202;2635;5787;2739;3382;8916;4597;3143;9508;9955;6146;2185;2433;6689;5113;4885;7290;3033;1708;8236;5998;4074;6584;7865;7338;6483;605;6579;5778;6656;438;5530;1809;5533;988;4169;8416;8220;2473;3732;1370;9344;2536;9830;3134;5371;458;5984;7168;8479;6807;4442;9818;9078;426;3336;4486;7706;1310;81;4381;7365;1309;9859;9813;4980;7380;7784;6708;1886;169;8510;3085;2873;6880;761;3824;3725;1571;512;1857;462;8181;6806;9696;6874;7071;6099;3799;4483;9406;7974;4592;7216;6440;6340;5780;993;6665;7866;5966;2516;7290;8584;7154;4013;2957;5751;6127;6194;7836;3732;2818;5915;5626;4755;2609;7262;5777;5775;697;5510;299;9750;1861;172;8936;5748;1310;5176;8276;9469;878;3508;352;3470;3308;1921;2460;766;826;8814;6348;4264;5780;2017;8828;3889;8705;8387;5942;9743;1346;9;1610;8094;6813;9582;9939;48;4596;9876;9060;2328;7770;5170;945;1306;6639;630;9782;134;1944;1851;8217;5575;1683;8682;9702;8204;455;9244;580;4654;7395;9807;6898;8943;5530;3490;4616;1347;8686;3656;7151;3969;831;8167;2269;1433;6844;7623;4899;8151;6424;3140;7006;7199;8638;2138;4332;1339;4563;110;9243;7478;7244;1983;7527;4445;5970;5675;5138;9713;9093;4677;4318;7383;9131;6812;1291;3253;5683;465;3084;5520;4695;5910;7109;6382;9508;9045;1444;3784;949;2872;3388;8461;8790;9198;5090;7853;2690;2101;6111;2955;9071;3292;3446;2829;1744;3422;249;7963;1548;6773;2937;2461;1850;7548;3853;6868;5388;7649;922;4712;6651;5101;8858;7306;6530;3410;4343;1309;8115;3968;5519;4081;3978;5104;652;271;8706;9434;8823;4753;5455;3548;5659;2395;8543;9911;4164;7403;2906;8380;7820;6940;6430;6828;4210;8482;2109;8274;8953;2521;1049;399;3509;9581;5930;8828;4546;8626;8882;1115;2409;2599;1441;8536;2299;2498;1118;3134;6015;9554;465;4761;5095;9274;3391;8022;6232;3095;7676;6670;1488;8505;8921;2364;667;8127;1049;9875;8255;4745;1700;8353;3009;3899;2910;6366;6658;9976;195;3522;2341;5521;7596;4692;2837;5132;2241;185;5435;4484;5068;1624;3667;3943;5905;9723;4562;6850;684;7990;6736;7036;9319;5483;6893;4773;5885;2593;5449;4695;3826;4208;867;4408;2064;8689;6247;4723;2211;9196;1127;6431;6577;9795;2690;7299;2814;6469;5993;203;6590;8003;5773;6795;8781;2682;2987;9799;5804;1834;9155;1442;7440;473;6717;5216;4024;5900;2426;5694;4285;555;2026;6634;5872;9053;9289;4619;4343;4982;2651;5075;5727;7862;429;2384;8335;972;5129;8335;8890;4193;1448;4269;1183;3260;4193;7376;7324;5254;1737;3645;21;2301;7927;9795;7408;6421;7366;534;6554;6919;7859;6530;6470;1010;472;4409;316;6599;578;821;1845;1727;4048;4680;7235;5460;3209;8973;6031;8282;8308;9941;125;9966;8893;9975;1216;9301;2678;8967;4174;7226;8963;1292;6038;8275;7734;8389;7912;8977;8726;5620;5061;3200;3691;7635;7970;3104;4949;7277;7210;5181;3464;2581;2687;5774;1303;7100;5158;3081;5926;6036;3430;6367;9370;4169;8509;125;346;2368;134;4003;4428;3090;592;9913;2348;8321;3345;4460;7896;4749;3834;2148;1945;4449;4990;6166;3144;4976;6057;5032;6589;9639;751;1391;9347;9883;2615;1437;5684;4353;8858;4478;3017;8710;7802;3587;9795;9845;3633;9571;9156;8289;467;6908;3898;8549;8360;9729;6823;9780;30;1344;2844;7111;548;3196;6671;6350;2617;8801;3322;5609;4420;7651;7805;4219;4338;7669;4648;6019;5328;6320;5218;9650;6912;7954;54;4521;7549;5915;5413;904;5204;2677;897;866;9587;5588;1409;6684;3517;7442;4736;1379;3216;8862;9822;8764;9144;7823;9436;3596;3743;6867;6543;2026;1757;2898;7351;4649;1532;5748;2318;8973;183;81;9791;1762;92;4347;8265;1016;5522;1503;7756;5258;1769;7273;7347;6278;1925;756;9563;187;6278;3892;3811;1025;2975;888;6306;9611;6393;1031;2800;4282;8916;7456;7466;6379;1416;9125;5058;7172;7011;9302;1082;7634;1055;1400;5189;4394;6214;2083;3586;2497;3156;6826;4545;6535;9797;7703;7503;2846;9923;3618;4372;592;6327;1399;918;7862;1474;3314;9158;8016;1022;8178;2007;3445;2393;6657;623;1425;6138;5559;7539;3089;173;5007;237;2690;9367;1554;5697;3480;6799;2882;1074;3783;3605;3785;6889;8467;8377;5225;6899;4758;9758;7684;446;5546;6431;7260;9171;8164;3690;4518;8216;3307;4003;9771;3687;124;2998;6105;8211;5836;7804;2345;9187;8591;7509;2338;687;6500;8716;4086;3279;6694;1499;3655;1114;9095;6239;9597;2954;731;6929;1070;5081;424;7555;9894;1454;7188;2075;9054;6518;6018;1100;9743;448;9980;329;5203;1034;2546;5051;4758;3962;1414;8411;3959;7308;6132;6848;8569;3233;2470;5499;9968;2465;8551;8559;505;6942;9982;4061;1045;3782;335;8298;4237;2894;1215;5958;9789;6641;5363;6377;3436;1591;570;2691;2528;4007;5527;6581;631;1683;2763;3772;6915;2318;8087;8134;6371;2860;1709;3615;6501;2204;5477;5362;5296;2245;1329;8722;1054;7698;223;1821;5384;6480;6151;5711;2974;1778;3931;4566;1748;8927;7468;9682;4899;6673;9811;903;5891;7217;5784;6409;2968;5887;2603;52;3178;7267;5170;8561;2902;7246;9653;4098;4977;6588;574;6807;186;2192;5191;279;8920;8223;6289;8297;2943;8105;9501;1517;2496;7161;2664;5498;9891;6663;2698;6549;4112;7818;7380;2286;1849;7746;9355;2652;9352;7225;1562;7559;9674;9141;7134;2491;2667;2811;9183;8553;559;5936;2859;5143;3403;3045;9612;4048;6445;711;3010;7765;1567;4012;6944;2869;3579;3767;8190;3921;8202;9642;1846;5066;649;2868;8444;3509;30;8739;6326;148;897;5926;611;50;1033;7908;7642;14;2929;7818;6687;253;2314;5730;3618;8241;2112;3085;718;2006;7942;1342;1091;4364;4973;326;4790;44;1888;2862;6836;3326;9822;1241;391;2679;3787;6664;9228;7456;2723;9798;6116;3633;959;2484;7390;2861;2945;6097;8357;4693;4893;8007;6414;1073;9113;2853;9856;1335;3177;1786;1760;399;6144;7900;5103;3433;9151;162;1844;7754;7294;6618;2554;7308;3860;3683;5004;2147;8044;1425;4488;566;9889;2397;9048;4638;8496;982;4836;8032;2183;6377;4559;6692;4760;7602;6391;7128;4365;4699;549;8834;9559;8606;3085;1066;5601;8504;5584;2473;4903;8688;2649;8741;2421;4442;4367;3466;810;5704;5206;939;8241;7933;8933;9785;3084;9454;7094;2978;6765;4783;3871;8675;9289;3607;5850;4304;1624;2332;8777;7304;7825;9494;8945;1868;9562;2478;2015;5303;6283;2530;2627;4723;4925;5020;5162;2967;4851;4802;7257;9728;4917;8289;9255;9364;458;7225;6003;7749;1499;2962;2316;6921;4291;3488;4186;1741;9233;6949;357;4572;668;3335;5689;3560;5103;9747;828;2371;1092;9207;3148;4633;9518;2175;196;4375;963;5981;9129;407;6203;4365;636;9770;4952;344;3678;766;4297;359;8706;2082;6043;6963;2200;2098;8835;8871;7559;8849;3599;1167;1144;5661;7740;5116;8221;4402;7472;4210;2466;1236;594;3138;1680;6441;6867;7801;6395;2197;1694;2693;6050;7014;9621;7663;820;8941;5908;2571;4690;5995;101;3525;794;6030;4050;8344;7978;7845;2658;9335;5502;6213;1057;9550;7185;72;6367;2449;9824;892;6742;2892;5160;7771;2799;5372;2544;745;7517;869;4414;3765;7972;6775;1709;460;2271;9893;5899;5729;8792;2056;5420;5377;7898;4779;1801;5682;1826;9880;5498;4433;9727;6533;3514;8684;6952;6097;8884;958;2268;5086;8818;375;3510;6061;5809;6173;4576;7260;4342;356;7052;6777;9167;3634;4773;751;4078;499;360;7561;411;3636;8027;6155;2140;2194;1502;9117;8303;8364;256;9694;9684;5781;6382;2090;9162;3504;1049;1679;9047;164;4258;2315;908;7889;7666;6101;3924;4819;925;6638;3783;9190;6805;4188;8558;227;2132;3100;9394;2988;86;4446;2221;2944;6213;9628;2577;2174;6084;2944;9168;1475;8089;8979;2310;3373;4949;6860;7468;6904;615;1622;4463;6172;579;7783;548;2136;3942;2396;756;1925;3534;986;3174;3219;1793;6707;9206;8049;2769;8261;8798;2805;7171;6412;2553;4507;7907;6118;329;98;9595;4965;8323;4093;9311;5281;1152;7787;2352;9392;6934;5631;2914;5434;8318;981;8890;8722;5517;9937;3944;9663;2578;9370;5517;1984;963;6692;3078;3911;5172;3036;3372;8137;4454;2696;9959;6965;6689;1257;5523;5635;4770;1602;995;8531;4740;5306;3779;5769;7386;9077;2890;3433;171;3710;9237;9089;3546;5005;2005;9657;6842;1024;8803;3026;7994;1009;7538;1851;7732;4999;8222;1878;3909;8287;57;6351;7848;7313;8095;5218;3730;5870;83;8054;9974;1315;6900;1807;9809;9068;9403;2072;8438;7043;1282;9236;3205;3338;8122;6011;7341;9662;3054;3866;3102;311;3084;7364;8059;3903;2728;2802;8864;6850;5672;6455;3914;5783;7728;2536;7274;2836;5661;7710;2437;8497;5129;2704;7651;5120;5603;9828;2685;7407;3678;7383;2557;7109;9899;9257;1369;8292;5467;2086;6098;7137;6042;5597;2503;7274;7265;2592;2216;5415;4281;3679;6712;9311;774;3582;585;4281;8917;1853;8678;1720;4062;2758;9160;3119;5085;32;7804;6637;8418;5156;5414;3581;8776;2951;681;2609;8414;8412;9249;7445;2660;7397;9228;727;9682;2756;9711;1246;9941;6639;4899;7897;3967;1706;597;805;634;5214;5166;4032;9771;2281;4128;1494;6241;909;1925;1674;7730;5786;6453;7312;6413;8724;2384;7467;5749;5915;1788;7441;3580;8413;8679;1724;7779;3123;372;8389;4212;7340;4884;9735;3675;1677;8640;2398;2077;6149;2061;1441;6251;2116;7051;6422;4875;3534;6657;2710;8129;4193;5621;5144;6478;6122;3874;5501;1199;3607;6984;3406;6264;2828;9484;8087;8813;7047;5932;599;8560;3145;5939;8353;7783;9131;9607;7985;8072;9231;3532;258;3536;2469;1528;4649;3682;8661;3938;8350;3397;8006;4363;9612;9503;340;8481;6577;269;8950;5921;2505;2463;3668;1581;8341;3828;8297;8764;2788;6040;9317;1508;7452;3964;8988;5213;4270;2961;6543;8482;7303;7062;7378;4747;6725;6965;7798;9873;6224;6760;591;9965;6056;9641;1040;8548;1061;28;7473;6952;9145;9879;3166;1887;5657;4883;5984;7322;9930;103;6038;4865;7649;1206;1399;7649;6944;9656;8176;7616;3710;3445;6728;26;7739;8025;3268;2506;4921;5215;8393;9246;6213;1977;5685;4172;8541;8272;4990;2691;2272;1816;7734;3156;1303;3425;57;1411;5643;7063;9703;5439;3016;3343;6045;1759;6772;6940;3058;382;4342;6238;2320;7052;3241;1490;6935;1552;932;3439;8766;1404;3383;202;6721;2086;9698;5731;655;6815;5720;4062;9316;5136;820;1534;4090;5568;1173;6578;5460;176;3922;9855;7028;4929;8123;1705;697;6340;6079;3200;4465;5919;6381;6169;3350;9608;5343;6951;1830;3838;5858;7820;3266;656;1118;2823;7404;1867;145;2606;247;5220;8994;8260;11;4340;7238;9754;2070;396;4833;4811;7516;7210;3682;1152;572;1422;4699;2839;961;9022;879;2698;6956;6901;4688;3209;3050;978;1505;1392;2607;1796;4321;2745;9482;8930;4234;6066;2939;5845;9554;4440;6000;2309;3481;8585;1869;2936;2100;1475;5326;6009;1455;9108;9118;3756;9823;1602;775;6367;6544;8497;7940;376;4050;3835;5603;6260;2984;7279;8152;2676;8659;9670;9307;889;4586;9443;4187;7113;5818;4174;1120;373;4761;232;7038;7327;1275;826;5902;4909;3775;6336;5799;1605;3265;9933;7414;2266;1771;3860;9461;5205;9855;5482;4396;10;3809;7575;4090;9657;2716;568;1510;2945;5482;8908;6774;471;6401;9368;831;6529;785;439;8296;4540;796;3725;7204;1438;8769;4977;3829;2739;3853;6767;8379;7001;3594;3147;1468;1090;704;7456;7105;3673;4269;7843;4422;6312;9451;5387;525;8975;4062;8754;4717;993;4359;2007;8129;8166;9079;6314;1885;368;9336;5420;2114;6333;1785;1061;6699;491;1339;9970;7308;6675;1603;7454;8100;2622;7570;843;4090;852;7158;3413;5114;3655;1070;1084;2423;1503;5826;303;8613;820;1002;342;3322;556;9407;3898;8265;8437;199;5212;5043;6935;1192;2860;6863;6525;1693;9516;8541;3259;6431;5294;3713;6518;5948;4531;9640;795;9239;6260;4081;3988;5745;697;7033;197;7328;8896;1514;4168;794;1828;2846;9104;4185;3332;7621;8783;8781;8302;5240;7946;7497;7264;1334;3869;383;3123;758;3866;9239;2259;4303;5549;2151;3335;2000;5969;5489;8590;7913;3217;2623;4973;3591;7788;3683;2422;2698;6902;7974;2660;1835;2696;5933;648;1538;2508;3454;6827;3221;1348;8340;4492;1525;5738;4893;1315;9435;7270;3272;8015;5527;6986;760;9235;3287;8045;5943;6370;3104;1599;7357;1153;422;9381;5045;772;7580;954;4621;8980;8521;7520;7285;3615;7667;1924;824;5092;7540;3236;6784;1529;4880;5741;4818;704;5901;3703;8621;422;4282;4549;9718;4995;324;8770;64;9623;4283;5201;6087;8886;5069;1648;7727;471;8320;3594;9033;1129;4503;5218;4864;4116;2697;4884;5401;1821;6410;1631;5031;5736;4189;8856;8090;8912;5826;339;3099;7812;7290;6094;1709;3180;9580;4548;7378;299;9340;9285;4671;1109;7316;5800;7962;9496;7171;2369;1031;7654;5150;4248;4296;6189;6644;5344;3450;4345;668;530;3346;6890;9794;5138;8323;9650;3147;29;3652;2939;4195;37;5930;733;5540;5382;6244;6414;2079;3232;2804;7380;6867;2029;435;6411;2830;4334;7914;9514;813;718;6782;8276;2317;2789;3765;7934;5358;3211;9235;4012;6526;2024;2400;9629;3939;8815;8403;8374;2774;190;4060;6000;2513;7710;1496;8121;8192;916;584;371;6636;6029;9989;2115;8524;6747;5520;2563;6543;6793;9073;2092;8122;3207;2705;4323;2769;5490;4224;3627;9728;3692;8786;596;836;7253;381;1169;8958;2399;969;7885;3807;2852;4541;4114;307;6224;5514;2974;4709;4353;6265;4404;9730;8995;2704;5877;1989;1431;2294;3929";

            [Benchmark]
            public List<int> ParseManually()
            {

                List<int> numbers = new List<int>();
                List<string> subStr = new List<string>();

                int pos = inputData.IndexOf(";");
                int i = 0;
                int prevPos = pos;

                while (pos > -1)
                {
                    string tempStr = "";
                    if (i == 0)//Start
                    {
                        tempStr = inputData.Substring(0, pos);
                    }
                    else
                    {
                        tempStr = inputData.Substring(prevPos + 1, (pos - prevPos - 1));
                    }

                    subStr.Add(tempStr);
                    if (i > 0)
                    {
                        prevPos = pos;
                    }
                    pos = inputData.IndexOf(";", pos + 1);
                    i++;
                    if (pos == -1)//Last Value
                    {
                        tempStr = inputData.Substring(prevPos + 1);
                        subStr.Add(tempStr);
                    }
                }
                //Coverting string values to int
                foreach (string str in subStr)
                {
                    numbers.Add(Int16.Parse(str));
                }

                return numbers;
            }

            [Benchmark]
            public List<int> ParseWithLinq()
            {
                return inputData.Split(';').Select(int.Parse).ToList();
            }
        }

        public class Program
        {
            public static void Main(string[] args)
            {
                BenchmarkRunner.Run<ParseDelimitedStringToListOfInts>();
            }
        }
    }
}

然后我运行基准:

dotnet run -c Release

结果很有趣:

|        Method |     Mean |   Error |  StdDev |
|-------------- |---------:|--------:|--------:|
| ParseManually | 613.0 us | 7.42 us | 6.58 us |
| ParseWithLinq | 212.6 us | 3.56 us | 4.24 us |

结果令我惊讶!事实证明,这段代码不仅更短,而且几乎3倍更快

return inputData.Split(';').Select(int.Parse).ToList();
© www.soinside.com 2019 - 2024. All rights reserved.