context.marshal_as在每次调用时执行的时间更长 < >我有一个调试功能,将一些图像导出到硬盘,它们在非托管C++ DLL中。该函数有两个参数,它们被封送为完整文件名的单个字符串。这个函数被多次调用。在执行应用程序时,我注意到它会随着时间的推移而变慢,我将其追溯到这个函数,这多亏了SlimTune!。如果我保留封送处理代码,但注释掉这一行: std::string completeFileName = m_csTempFolder + stdSubFolderName + stdFileName + ".bmp";

context.marshal_as在每次调用时执行的时间更长 < >我有一个调试功能,将一些图像导出到硬盘,它们在非托管C++ DLL中。该函数有两个参数,它们被封送为完整文件名的单个字符串。这个函数被多次调用。在执行应用程序时,我注意到它会随着时间的推移而变慢,我将其追溯到这个函数,这多亏了SlimTune!。如果我保留封送处理代码,但注释掉这一行: std::string completeFileName = m_csTempFolder + stdSubFolderName + stdFileName + ".bmp";,c++,visual-studio-2008,marshalling,unmanaged,C++,Visual Studio 2008,Marshalling,Unmanaged,替换为: std::string completeFileName = "C:\\Users\\pedro\\AppData\\Local\\Temp\\BatchProc64\\test.bmp"; 我不再有这个问题了。看起来问题在于将刚刚封送的字符串与字符串常量混合到一个新字符串中。有人能解释吗? 应用程序使用的内存保持稳定,没有应用程序崩溃。 我将VisualStudio2008与.NET3.5一起使用 提前谢谢 功能代码的开头如下所示: // Export the 32 bit buf

替换为:

std::string completeFileName = "C:\\Users\\pedro\\AppData\\Local\\Temp\\BatchProc64\\test.bmp";
我不再有这个问题了。看起来问题在于将刚刚封送的字符串与字符串常量混合到一个新字符串中。有人能解释吗? 应用程序使用的内存保持稳定,没有应用程序崩溃。 我将VisualStudio2008与.NET3.5一起使用 提前谢谢

功能代码的开头如下所示:

// Export the 32 bit buffer into a 8 bit buffer, then write it into a file, used for trace image generation (app debug)
void CMtxSurface::ExportTraceImage32bit(System::String^ subFolderName, System::String^     fileName, MIL_ID img32bit)
{
// The [Conditional("_TRACE_")] doesn't work in C++ compiler so we need to use ifdef...
#ifdef _TRACE_

marshal_context context;
std::string stdSubFolderName = context.marshal_as<std::string>(subFolderName);
std::string stdFileName = context.marshal_as<std::string>(fileName);

std::string completeFileName = m_csTempFolder + stdSubFolderName + stdFileName + ".bmp";
//  std::string completeFileName = "C:\\Users\\pedro\\AppData\\Local\\Temp\\BatchProc64\\test.bmp";

可能其中一个字符串变得越来越长?不,所有调试文件都已创建好,没有应用程序使用的内存随时间增加。。。这真的很奇怪,它看起来像是字符串操作内部的问题。如果我这样做,那就更糟糕了!马歇尔语境;系统::字符串^topName=子文件夹名+文件名+.bmp;std::string stdTopName=context.marshal\u astpname;std::string completeFileName=m_csTempFolder+stdTopName;好的,真正的问题在这里:std::wstring wfilename completeFileName.begin,completeFileName.end;我需要将字符串转换为wstring。即使completeFileName是一个局部变量,它也会随着时间的推移变得越来越长。