วิธีการปรับปรุงประสิทธิภาพ concatenation สตริงที่ใน Visual c#

การแปลบทความ การแปลบทความ
หมายเลขบทความ (Article ID): 306822 - ผลิตภัณฑ์ที่เกี่ยวข้องในบทความนี้
ขยายทั้งหมด | ยุบทั้งหมด

เนื้อหาบนหน้านี้

สรุป

บทความที่มีการทีละขั้นตอนนี้แสดงผลประโยชน์ของการใช้การStringBuilderคลาทางเทคนิค concatenation ดั้งเดิม สายอักขระใน.NET Framework จะ invariant (นั่นคือ ข้อความที่มีการอ้างอิงเป็นแบบอ่านอย่างเดียวหลังจากที่การปันส่วนเริ่มต้น) แสดงผลประโยชน์ประสิทธิภาพมาก และ poses ปัญหาบางอย่างกับนักพัฒนาที่รับผิด accustomed ไปเทคนิค manipulation สตริงที่ C/c ++

คำอธิบายของสตริงการใน.NET Framework

เทคนิคหนึ่งเพื่อปรับปรุงสตริงที่ concatenation เหนือstrcat()ใน Visual C/c ++คือเพื่อ ปันส่วนเป็นอาร์เรย์ของอักขระที่มีขนาดใหญ่เป็นบัฟเฟอร์และข้อมูลสายอักขระการคัดลอกลงในบัฟเฟอร์ ใน.NET Framework สตริงที่มี immutable ไม่สามารถปรับเปลี่ยนในสถานที่ c# + concatenation ตัวดำเนินการสร้างสตริงที่ใหม่ และสาเหตุที่น่าลดประสิทธิภาพการทำงานเมื่อมัน concatenates จำนวนมากข้อความ

อย่างไรก็ตาม .NET Framework รวมคำStringBuilderคลาสที่ได้รับการออกแบบสำหรับสตริงที่ concatenation และมีประโยชน์เดียวกันโดยใช้อาร์เรย์แบบอักขระใน C/c ++ ตลอดจนเติบขนาดบัฟเฟอร์โดยอัตโนมัติ (ถ้าจำเป็น) และติดตามความยาวที่คุณ โปรแกรมประยุกต์ตัวอย่างในบทความนี้อธิบายการใช้การStringBuilderคลาส และเปรียบเทียบประสิทธิภาพการทำงานกับ concatenation

สร้าง และเรียกใช้แอพลิเคชันของเดโม

  1. เริ่มการทำงานของ Visual Studio และสร้างโปรแกรมประยุกต์ Visual c# คอนโซลการใหม่
  2. รหัสต่อไปนี้ใช้ตัวดำเนินการ concatenation +=และStringBuilderคลากับเวลา concatenations 5,000 ของ 30 อักขระแต่ละ เพิ่มรหัสนี้ขั้นตอนหลัก
    const int sLen=30, Loops=5000;
    DateTime sTime, eTime;
    int i;
    string sSource = new String('X', sLen);
    string sDest = "";
    // 
    // Time string concatenation.
    // 
    sTime = DateTime.Now;
    for(i=0;i<Loops;i++) sDest += sSource;
    eTime = DateTime.Now;
    Console.WriteLine("Concatenation took " + (eTime - sTime).TotalSeconds + " seconds.");
    // 
    // Time StringBuilder.
    // 
    sTime = DateTime.Now;
    System.Text.StringBuilder sb = new System.Text.StringBuilder((int)(sLen * Loops * 1.1));
    for(i=0;i<Loops;i++) sb.Append(sSource);
    sDest = sb.ToString();
    eTime = DateTime.Now;
    Console.WriteLine("String Builder took " + (eTime - sTime).TotalSeconds + " seconds.");
    // 
    // Make the console window stay open
    // so that you can see the results when running from the IDE.
    // 
    Console.WriteLine();
    Console.Write("Press Enter to finish ... ");
    Console.Read();
    					
  3. บันทึกโปรแกรมประยุกต์ กด F5 เพื่อคอมไพล์ และเรียกใช้โปรแกรมประยุกต์ หน้าต่างคอนโซลควรแสดงผลลัพธ์ที่คล้ายกับข้อความต่อไปนี้:
    concatenation หนึ่งวินาที 6.208928
    ตัวสร้างสตริงที่ใช้วินาที 0

    กด ENTER เพื่อเสร็จสิ้น...
  4. กด ENTER เพื่อหยุดการเรียกใช้โปรแกรมประยุกต์ และปิดหน้าต่างคอนโซล

การแก้ไขปัญหา

  • ถ้าคุณอยู่ในสภาพแวดล้อมที่สนับสนุนการส่งกระแสข้อมูล ข้อมูลอากาศในแบบฟอร์มเว็บ ASPX อินหรือโปรแกรมประยุกต์ของคุณกำลังเขียนข้อมูลลงในดิสก์ ควรหลีกเลี่ยงค่าผลิตบัฟเฟอร์ของ concatenation หรือStringBuilderและเขียนข้อมูลตรงกับกระแสข้อมูลผ่านทางการResponse.Writeวิธีการหรือวิธีเหมาะสมสำหรับกระแสข้อมูลแบบสอบถาม
  • ความพยายามที่นำมาใช้ใหม่ที่มีอยู่StringBuilderคลาส แทนการปันส่วนใหม่แต่ละครั้งที่คุณต้องการอย่างหนึ่งอย่าง เรขาคณิตของฮีปจำกัด และลดคอลเลกชันเบจ ไม่ว่ากรณี ใดใช้นั้นStringBuilderคลาใช้อย่างมีประสิทธิภาพมากขึ้นของฮีปนอกเหนือจากการใช้ที่ทำให้การ + ตัวดำเนินการ

ข้อมูลอ้างอิง

กระบวนการStringBuilderคลาสที่ประกอบด้วยหลายวิธีอื่น ๆ สำหรับ manipulation สายอักขระแบบแทนที่ได้อธิบายไว้ในบทความนี้ สำหรับข้อมูลเพิ่มเติม ค้นหาสำหรับ "StringBuilder" ในวิธีใช้แบบออนไลน์

คุณสมบัติ

หมายเลขบทความ (Article ID): 306822 - รีวิวครั้งสุดท้าย: 19 ตุลาคม 2553 - Revision: 2.0
ใช้กับ
  • Microsoft Visual C# 2005
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Visual C# 2008 Express Edition
Keywords: 
kbsweptvs2008 kbhowtomaster kbperformance kbmt KB306822 KbMtth
แปลโดยคอมพิวเตอร์
ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ
ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้:306822

ให้ข้อเสนอแนะ

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com