Làm th? nào đ? c?i thi?n hi?u su?t n?i chu?i trong Visual C#

ID c?a bài: 306822 - Xem s?n ph?m mà bài này áp d?ng vào.
Bung t?t c? | Thu g?n t?t c?

? Trang này

TÓM T?T

Bài vi?t t?ng bư?c này cho b?n th?y nh?ng l?i ích c?a vi?c s? d?ng các StringBuilder l?p h?c hơn k? thu?t truy?n th?ng n?i. Chu?i trong các.NET Framework là b?t bi?n (có ngh?a là, các văn b?n tham chi?u là ch?-đ?c sau khi vi?c phân b? ban đ?u). Đi?u này cung c?p nhi?u hi?u su?t l?i ích và đ?t ra m?t s? thách th?c các nhà phát tri?n nh?ng ngư?i là quen v?i C/c ++ chu?i thao tác k? thu?t.

Mô t? v? b? dây các.NET Framework

M?t k? thu?t đ? c?i thi?n chu?i n?i qua strcat() trong Visual C/c ++ là c?p phát m?t m?ng l?n nhân v?t như là m?t đ?m, copy chu?i d? li?u vào b? đ?m. Trong các.NET Framework, m?t chu?i là b?t bi?n; nó không th? s?a đ?i t?i ch?. Các C# + n?i nhà đi?u hành xây d?ng m?t chu?i m?i và nguyên nhân gi?m hi?u su?t khi nó concatenates m?t lư?ng l?n các văn b?n.

Tuy nhiên, các.NET Framework bao g?m m?t StringBuilder l?p t?i ưu hóa cho chu?i n?i. Nó cung c?p các l?i ích tương t? như cách s? d?ng m?t m?ng nhân v?t trong C/c + +, c?ng như t? đ?ng ngày càng tăng kích thư?c b? đ?m (n?u c?n) và theo d?i chi?u dài cho b?n. ?ng d?ng m?u trong bài vi?t này minh ch?ng vi?c s? d?ng các StringBuilder l?p h?c và so sánh hi?u su?t đ? n?i.

Xây d?ng và ch?y m?t ?ng d?ng tr?nh di?n

  1. B?t đ?u Visual Studio, và sau đó t?o ra m?t ?ng d?ng Visual C# giao di?n đi?u khi?n m?i.
  2. Các m? sau đây s? d?ng các nhà đi?u hành n?i += và các StringBuilder l?p đ? th?i gian 5.000 concatenations c?a 30 k? t? m?i. Thêm m? này vào các th? t?c chính.
    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. Lưu các ?ng d?ng. Nh?n F5 đ? biên d?ch và sau đó ch?y các ?ng d?ng. Các c?a s? giao di?n đi?u khi?n nên hi?n th? đ?u ra tương t? như sau:
    N?i m?t 6.208928 giây.
    Chu?i Builder m?t 0 giây.

    Nh?n ENTER đ? k?t thúc...
  4. H?y b?m ENTER đ? ng?ng ch?y ?ng d?ng và đóng c?a s? giao di?n đi?u khi?n.

Gi?i đáp th?c m?c

  • N?u b?n đang ? trong m?t môi trư?ng h? tr? streaming các d? li?u, ch?ng h?n như trong m?t m?u Web ASPX ho?c ?ng d?ng c?a b?n b?ng văn b?n các d? li?u vào đ?a, h?y xem xét tránh overhead đ?m n?i ho?c các StringBuilder, và vi?t d? li?u tr?c ti?p đ?n các lu?ng thông qua các Response.write phương pháp ho?c các phương pháp thích h?p cho các d?ng trong câu h?i.
  • C? g?ng tái s? d?ng hi?n t?i StringBuilder l?p hơn là tái phân b? m?i khi b?n c?n nó. Đi?u này h?n ch? s? tăng trư?ng c?a heap và làm gi?m b? sưu t?p rác. Trong c? hai trư?ng h?p, b?ng cách s? d?ng các StringBuilder l?p h?c làm cho vi?c s? d?ng hi?u qu? hơn heap này hơn b?ng cách s? d?ng các + nhà đi?u hành.

THAM KH?O

Các StringBuilder l?p có nhi?u phương pháp khác đ? thao tác chu?i t?i ch? mà không đư?c mô t? trong bài vi?t này. Đ? bi?t thêm chi ti?t, t?m ki?m cho "StringBuilder" trong tr? giúp tr?c tuy?n.

Thu?c tính

ID c?a bài: 306822 - L?n xem xét sau cùng: 27 Tháng Tám 2011 - Xem xét l?i: 2.0
Áp d?ng
  • Microsoft Visual C# 2005
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Visual C# 2008 Express Edition
T? khóa: 
kbsweptvs2008 kbhowtomaster kbperformance kbmt KB306822 KbMtvi
Máy d?ch
QUAN TRỌNG: Bài vi?t này đư?c d?ch b?ng ph?n m?m d?ch máy c?a Microsoft ch? không ph?i do con ngư?i d?ch. Microsoft cung c?p các bài vi?t do con ngư?i d?ch và c? các bài vi?t do máy d?ch đ? b?n có th? truy c?p vào t?t c? các bài vi?t trong Cơ s? Ki?n th?c c?a chúng tôi b?ng ngôn ng? c?a b?n. Tuy nhiên, bài vi?t do máy d?ch không ph?i lúc nào c?ng hoàn h?o. Lo?i bài vi?t này có th? ch?a các sai sót v? t? v?ng, cú pháp ho?c ng? pháp, gi?ng như m?t ngư?i nư?c ngoài có th? m?c sai sót khi nói ngôn ng? c?a b?n. Microsoft không ch?u trách nhi?m v? b?t k? s? thi?u chính xác, sai sót ho?c thi?t h?i nào do vi?c d?ch sai n?i dung ho?c do ho?t đ?ng s? d?ng c?a khách hàng gây ra. Microsoft c?ng thư?ng xuyên c?p nh?t ph?n m?m d?ch máy này.
Nh?p chu?t vào đây đ? xem b?n ti?ng Anh c?a bài vi?t này:306822

Cung cấp Phản hồi