Bạn hiện đang ngoại tuyến, hãy chờ internet để kết nối lại

Làm thế nào để cải thiện hiệu suất nối chuỗi trong Visual C#

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
Đối với một Microsoft Visual JScript.NET Phiên bản của bài viết này, xem 306823.
Đối với một Microsoft Visual Basic.NET Phiên bản của bài viết này, xem 306821.

Bài viết này đề cập đến Microsoft sau.Không gian tên thư viện lớp của NET Framework:
  • System.Text

TRONG NHIỆM VỤ 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.

Cảnh báo: Bài viết này được dịch tự động

Thuộc tính

ID Bài viết: 306822 - Xem lại Lần cuối: 08/27/2011 21:44:00 - Bản sửa đổi: 2.0

Microsoft Visual C# 2005, Microsoft Visual C# .NET 2002 Standard Edition, Microsoft Visual C# 2008 Express Edition

  • kbsweptvs2008 kbhowtomaster kbperformance kbmt KB306822 KbMtvi
Phản hồi