C++ 当字符串源为文件时,将值分配给TMemo的速度较慢

C++ 当字符串源为文件时,将值分配给TMemo的速度较慢,c++,string,c++builder,tmemo,C++,String,C++builder,Tmemo,我正在将文本(仅标准alpha字符)生成为std::string转换为char[]-数组以wchar并将其分配给TMemo框。。。(c++Builder。)在另一个点(函数),我正在从文件中读取(应该相同的)文本,并将其加载到std::string中,将其转换为char[]-数组,再将其加载到wchar中,然后再次将文本加载到TMemo框中。一切正常 创建字符串时,它会使用下面的函数快速加载到TMemo框中。。。但是,当从文本文件加载字符串时,它会突然变慢为爬行,大约慢10倍或更糟,即使除了字符

我正在将文本(仅标准alpha字符)生成为
std::string
转换为
char[]
-数组以
wchar
并将其分配给TMemo框。。。(c++Builder。)在另一个点(函数),我正在从文件中读取(应该相同的)文本,并将其加载到
std::string
中,将其转换为
char[]
-数组,再将其加载到
wchar
中,然后再次将文本加载到TMemo框中。一切正常

创建字符串时,它会使用下面的函数快速加载到TMemo框中。。。但是,当从文本文件加载字符串时,它会突然变慢为爬行,大约慢10倍或更糟,即使除了字符串的初始读取或创建之外,两者的代码都是相同的

更重要的是,这个函数唯一慢的部分是这一行

Form1->Memo1->Text = uni_out;
如果我把这行注释掉,就不会有减速

有没有想过为什么

void print_txt(char asc_in[])
{
    wchar_t *uni_out = new wchar_t[ strlen(asc_in) + 1 ]; // + 1 for term 0
    std::mbstowcs(uni_out, asc_in, strlen(asc_in) + 1);
    Form1->Memo1->Text = uni_out;
    delete[] uni_out;
}
编辑:


我只是注意到当文本文件被读取时,它的格式就消失了。。。当用记事本打开文件时,\r\n会创建新行,但当用std::ifstream、std::getline打开文件时,格式会完全消失,虽然我还没有确认这一点,但我认为它会将整个文件作为一行读取。

@aаn为什么现在
std::wstring
?@Someprogrammerdude:因为“默认通知模板”对于以下问题:
new T
is
std::vector
;)为什么不直接使用
Memo1->line
?您可以直接从文件加载,也可以处理行格式化,为什么要在生成程序中使用
char[]
,而在生成程序中,您得到了
AnsiString
本机。。。因此,您不需要转换任何内容。此外,如果uni_out不是以null结尾的,则分配行将一直添加到零命中,这甚至可以是文本本身之后的几兆数据。。。