Câu hỏi của tôi là: Chuỗi nối trong C# có an toàn không? Nếu chuỗi nối dẫn đến các lỗi không mong muốn và thay thế chuỗi nối đó bằng cách sử dụng StringBuilder sẽ làm cho các lỗi đó biến mất, điều đó có thể chỉ ra điều gì?Chuỗi Kết nối không an toàn trong C#, cần sử dụng StringBuilder?
Bối cảnh: Tôi đang phát triển một dòng lệnh nhỏ C# ứng dụng. Nó lấy các đối số dòng lệnh, thực hiện một truy vấn SQL hơi phức tạp và đầu ra khoảng 1300 hàng dữ liệu vào một tệp XML được định dạng.
Chương trình ban đầu của tôi sẽ luôn chạy tốt ở chế độ gỡ lỗi. Tuy nhiên, trong chế độ phát hành nó sẽ nhận được khoảng kết quả SQL 750, và sau đó chết với một lỗi. Lỗi là một cột dữ liệu nào đó không thể đọc được, thậm chí thông qua phương thức Read() của đối tượng SqlDataReader vừa trả về true.
Sự cố này đã được khắc phục bằng cách sử dụng StringBuilder cho tất cả các hoạt động trong mã, trước đây đã có "string1 + string2". Tôi không nói về chuỗi nối trong vòng lặp truy vấn SQL, nơi StringBuilder đã được sử dụng. Tôi đang nói về các kết nối đơn giản giữa hai hoặc ba biến chuỗi ngắn trước đó trong mã.
Tôi có ấn tượng rằng C# đủ thông minh để xử lý việc quản lý bộ nhớ để thêm một vài chuỗi với nhau. Liệu tôi có sai? Hoặc điều này cho thấy một số loại vấn đề mã khác?
Bạn có thể dán vào đoạn mã bằng chuỗi nối với phiên bản StringBuilder không? Lý do duy nhất tôi có thể nghĩ rằng bạn có thể nhận được một sự khác biệt với chuỗi nối với StringBuilder là trong đó quá tải của một số điều được gọi là, nhưng điều đó không nên có hiệu lực như bạn đang mô tả. –
Mã gốc: chuỗi filepath = đường dẫn + fileroot + ".xml"; Mã được cập nhật: chuỗi filepath = new StringBuilder (đường dẫn) . Áp dụng (fileroot) .Append (". Xml"). ToString(); Tôi đã thực hiện các thay đổi tương tự ở một số nơi. Đây là tất cả trước khi vòng lặp chính. Bên trong vòng lặp chính, tôi đã luôn sử dụng StringBuilder để xây dựng nội dung tệp XML. (Tôi không sử dụng các API XML vì nó nhanh hơn và điều này được cho là chỉ là một chương trình nhanh chóng và dơ bẩn.) –