Tôi có một phương pháp để thay thế mọi ký tự ngoại trừ những ký tự tôi chỉ định. Ví dụ,Inverse String.Replace - Cách làm nhanh hơn?
ReplaceNot("test. stop; or, not", ".;/\\".ToCharArray(), '*');
sẽ trở
"****.*****;***,****".
Bây giờ, đây không phải là một thể hiện của tối ưu hóa quá sớm. Tôi gọi phương thức này khá nhiều lần trong một hoạt động mạng. Tôi thấy rằng trên chuỗi dài hơn, nó gây ra một số độ trễ, và loại bỏ nó đã giúp một chút. Bất kỳ trợ giúp để tăng tốc độ này sẽ được đánh giá cao.
public static string ReplaceNot(this string original, char[] pattern, char replacement)
{
int index = 0;
int old = -1;
StringBuilder sb = new StringBuilder(original.Length);
while ((index = original.IndexOfAny(pattern, index)) > -1)
{
sb.Append(new string(replacement, index - old - 1));
sb.Append(original[index]);
old = index++;
}
if (original.Length - old > 1)
{
sb.Append(new string(replacement, original.Length - (old + 1)));
}
return sb.ToString();
}
Final # s. Tôi cũng đã thêm một trường hợp thử nghiệm cho chuỗi ký tự 3K, chạy ở 100K lần thay vì 1M để xem mức độ của mỗi thang này. Điều ngạc nhiên duy nhất là các biểu thức chính quy 'quy mô tốt hơn' hơn những người khác, nhưng nó không giúp đỡ vì nó là rất chậm để bắt đầu với:
User Short * 1M Long * 100K Scale John 319 2125 6.66 Luke 360 2659 7.39 Guffa 409 2827 6.91 Mine 447 3372 7.54 DirkGently 1094 9134 8.35 Michael 1591 12785 8.04 Peter 21106 94386 4.47
Cập nhật: Tôi làm việc tạo ra các biểu thức chính quy cho phiên bản Phêrô một biến tĩnh, và đặt nó vào RegexOptions.Compiled phải công bằng:
User Short * 1M Long * 100K Scale Peter 8997 74715 8.30
Pastebin liên kết đến mã thử nghiệm của tôi, hãy sửa lại cho tôi nếu nó là sai: http://pastebin.com/f64f260ee
Một nit: vui lòng thay đổi 'pattern.Contains (original [i]) == false? thay thế: bản gốc [i] 'thành' pattern.Contains (bản gốc [i])? gốc [i]: thay thế'. So sánh biểu thức bool thành true/false là không cần thiết và thường được coi là biểu mẫu không hợp lệ. –
Tôi đã chạy thử nghiệm tốc độ cho tất cả các phiên bản này và bản chỉnh sửa mới nhất của bạn thực sự là chậm nhất trong số tất cả chúng, bạn sẽ nhận được kết quả nhanh hơn gấp 4 lần bằng cách nào? –
@ john, tôi kiểm tra lại chúng, hy vọng tôi không làm gì đó như tải lại trang web trong khi chạy thử nghiệm :) – esac