linq을 사용하여 엔지니어 용 XML을 생성하는 코드가 있습니다. 제가 추가 답변을 생산 방법의 실제 속도를 표시하는누군가이 linq 개선에 도움이 될 수 있습니까
안녕, 아래의 코드가 추가됩니다 내 질문은 개선하고
public static string CreateXMLforEngineersByLinq(List<Engineers> lst)
{
string x = "<Engineers>\n";
x += string.Concat(lst.Select(s =>
string.Format("<Engineer>\n<LicenseID>{0}</LicenseID>\n<LastName>{1}</LastName>\n<FirstName>{2}</FirstName>\n<MiddleName>{3}</MiddleName>\n</Engineer>\n",
s.LicenseID, s.LastName, s.FirstName, s.MiddleName)));
return x + "</Engineers>";
}
결과이 방법을 속도를 어떤 방법이있다 에 StringBuilder
를 사용, 수정 및 환영 덕분에 여기에 도움이 :) 사람들이
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using test.Classes;
namespace test.LINQ
{
public static class BatchOperations
{
delegate string Operations(List<Engineers> i);
public static List<int> BatchAddition(List<int> lstNumbers)
{
lstNumbers = (from nl in lstNumbers
select nl + 2).ToList();
return lstNumbers;
}
public static string CreateXMLforEngineersTheSimpleWay(IEnumerable<Engineers> lst)
{
StringBuilder x = new StringBuilder();
x.AppendLine("<Engineers>");
foreach (var s in lst)
{
x.AppendFormat("<Engineer>\n<LicenseID>{0}</LicenseID>\n<LastName>{1}</LastName>\n<FirstName>{2}</FirstName>\n<MiddleName>{3}</MiddleName>\n</Engineer>\n",
s.LicenseID,
s.LastName,
s.FirstName,
s.MiddleName);
}
x.AppendLine("</Engineers1>");
return x.ToString();
}
public static string CreateXMLforEngineersByLinq(List<Engineers> lst)
{
string x = "<Engineers>\n";
x += string.Concat(lst.Select(s =>
string.Format("<Engineer>\n<LicenseID>{0}</LicenseID>\n<LastName>{1}</LastName>\n<FirstName>{2}</FirstName>\n<MiddleName>{3}</MiddleName>\n</Engineer>\n",
s.LicenseID, s.LastName, s.FirstName, s.MiddleName)));
return x + "</Engineers2>";
}
public static string CreateXMLforEngineersByLoop(List<Engineers> lst)
{
string XmlForEngineers = "<Engineers>";
foreach (Engineers item in lst)
{
XmlForEngineers += string.Format("<Engineer>\n<LicenseID>{0}</LicenseID>\n<LastName>{1}</LastName>\n<FirstName>{2}</FirstName>\n<MiddleName>{3}</MiddleName>\n</Engineer>\n"
, item.LicenseID, item.LastName, item.FirstName, item.MiddleName);
}
XmlForEngineers += "</Engineers3>";
return XmlForEngineers;
}
public static void ShowEngineersByLicense()
{
List<Engineers> lstEngr = new List<Engineers>();
Engineers tom = new Engineers();
tom.FirstName = "Tom";
tom.MiddleName = "Brook";
tom.LastName = "Crook";
tom.LicenseID = "1343-343434";
Engineers ken = new Engineers();
ken.FirstName = "ken";
ken.MiddleName = "Brook";
ken.LastName = "Crook";
ken.LicenseID = "1343-343434";
Engineers ben = new Engineers();
ben.FirstName = "ben";
ben.MiddleName = "Brook";
ben.LastName = "Crook";
ben.LicenseID = "1343-343434";
for (int y = 0; y <= 1000; y++)
{
lstEngr.Add(tom);
lstEngr.Add(ken);
lstEngr.Add(ben);
}
List<Operations> j = new List<Operations>();
j.Add(a => CreateXMLforEngineersTheSimpleWay(lstEngr));
j.Add(i => CreateXMLforEngineersByLinq(lstEngr));
j.Add(i => CreateXMLforEngineersByLoop(lstEngr));
DateTime start, end;
TimeSpan diff1 = new TimeSpan();
foreach (Operations currentMethod in j)
{
start = DateTime.Now;
Console.Write(currentMethod(lstEngr));
end = DateTime.Now;
diff1 = end - start;
Console.WriteLine(diff1);
Console.Write("\n\n");
}
}
}
가}
벤치마킹을 다시해야합니다. 1 : 눈에 띄는 차이를 만들기 위해 목록에 3 명 이상이 필요합니다 (10,000 회 시도). 2 : 서로 다른 문자열을 할당해야합니다 (현실 세계에서 가장 가능성이 높습니다). C#에는 불변 문자열이 있으므로 동일한 4 개의 문자열을 사용하는 것이 매우 빠릅니다. Guid.NewGuid(). ToString()을 사용하십시오.셋째, 테스트를 여러 번 (예 : 100) 실행하고 평균을 가져와야합니다. 나는 문자열 + = 문자열이 StringBuilder보다 뛰어나다 고 믿는다. – Rob
5000 명의 사람들과 달리기 때문에 결과는 다음과 같다. LINQ : 0.019ms, for-Loop : 12.059 _seconds_, 간단한 방법 : 0.010ms – Rob
나는 그 주석을 고맙게 여기고있다. @ Roob –