C ++ / CLI:为字符串句柄预分配内存

时间:2012-02-05 07:44:16

标签: interop c++-cli

我正在使用c ++ / CLI将字符串映射从本机c ++类传递给c#。使用stl映射的本机代码。在C ++ / CLI中,我将每个stl字符串转换为CString并使用String ^ str = gcnew String(umngd.c_str())插入到Dictionary中。 除了需要迭代地图,我想知道是否有内置的方法,我的问题是这段代码非常慢可能是由于许多gcnew离散内存分配。我的问题是如何预分配所有需要的内存,然后将值插入此预分配的内存中。

谢谢。

1 个答案:

答案 0 :(得分:1)

gcnew在垃圾收集堆上创建托管类型的实例。 .NET CLR已经为堆预先分配空间并管理它的大小,而且它非常聪明。

您无法预先分配托管对象。如果你想要一百万个托管字符串对象,你需要一百万gcnew。在我的笔记本电脑上,这需要几百毫秒。这太慢了吗?

测试您的代码。如果它实际上太慢,也许你可以使用不同的方法。对替代here进行了一些讨论。