Tôi có một ứng dụng cần lấy vài triệu char * làm tham số đầu vào (thường là chuỗi nhỏ hơn 512 ký tự (trong unicode)), và chuyển đổi và lưu trữ chúng dưới dạng. chuỗi mạng.Tối ưu hóa vài triệu từ * thành chuỗi chuyển đổi
Nó hóa ra là một nút cổ chai thực sự trong việc thực hiện ứng dụng của tôi. Tôi tự hỏi nếu có một số mẫu thiết kế hoặc ý tưởng để làm cho nó hiệu quả hơn.
Có một phần quan trọng khiến tôi cảm thấy như nó có thể được cải thiện: Có rất nhiều bản sao. Nói 1 triệu đối tượng đang đến, có thể chỉ có 50 mẫu char * độc đáo.
Đối với hồ sơ, đây là thuật toán Tôi đang sử dụng để chuyển đổi char * để string (thuật toán này là trong C++, nhưng phần còn lại của dự án là trong C#)
String ^StringTools::MbCharToStr (const char *Source)
{
String ^str;
if((Source == NULL) || (Source[0] == '\0'))
{
str = gcnew String("");
}
else
{
// Find the number of UTF-16 characters needed to hold the
// converted UTF-8 string, and allocate a buffer for them.
const size_t max_strsize = 2048;
int wstr_size = MultiByteToWideChar (CP_UTF8, 0L, Source, -1, NULL, 0);
if (wstr_size < max_strsize)
{
// Save the malloc/free overhead if it's a reasonable size.
// Plus, KJN was having fits with exceptions within exception logging due
// to a corrupted heap.
wchar_t wstr[max_strsize];
(void) MultiByteToWideChar (CP_UTF8, 0L, Source, -1, wstr, (int) wstr_size);
str = gcnew String (wstr);
}
else
{
wchar_t *wstr = (wchar_t *)calloc (wstr_size, sizeof(wchar_t));
if (wstr == NULL)
throw gcnew PCSException (__FILE__, __LINE__, PCS_INSUF_MEMORY, MSG_SEVERE);
// Convert the UTF-8 string into the UTF-16 buffer, construct the
// result String from the UTF-16 buffer, and then free the buffer.
(void) MultiByteToWideChar (CP_UTF8, 0L, Source, -1, wstr, (int) wstr_size);
str = gcnew String (wstr);
free (wstr);
}
}
return str;
}
Có vẻ như C++/CLI hoặc C++/CX thay vì C++. Tôi không thay đổi thẻ chỉ vì tôi không biết. – bames53
Vì vậy, bạn muốn kết thúc với chỉ 50 hoặc hơn C# dây và một triệu tài liệu tham khảo cho họ? –
C++/CLI của nó, và có, tôi có thể có 1 triệu tài liệu tham khảo, đó là một bộ sưu tập các bài kiểm tra theo thời gian. – greggorob64