2012-02-05 63 views
0

我使用C++/CLI將本地C++類的字符串映射傳遞給c#。使用stl map的本地代碼。在C++/CLI中,我將每個stl字符串轉換爲CString並使用String^str = gcnew String(umngd.c_str())插入Dictionary ^。 除了需要迭代地圖,我不知道是否有內置的方法去做,我的問題是,這段代碼非常慢,可能是由於許多gcnew分立內存分配。我的問題是如何預先分配所有需要的內存,然後將值插入此預分配內存。C++/CLI:爲字符串句柄預分配內存

謝謝。

+0

是的,這是行不通的。你最好寫一個懶惰的包裝器,實現'IDictionary '接口。 – 2012-02-05 13:57:43

+0

CString是從哪裏來的?我看到C++標準庫'std :: string'(順便說一下,它不是STL的一部分)和.NET'System :: String'。 – 2012-02-05 20:00:02

+0

漢斯能否詳細說明一下? – grunt 2012-02-06 14:59:12

回答

1

gcnew在垃圾收集堆上創建一個託管類型的實例。 .NET CLR已經預先分配了堆的空間並管理它的大小,並且它非常聰明。

您不能預分配託管對象。如果你想要一百萬個被管理的字符串對象,你需要一百萬個gcnew。在我的筆記本電腦上,這需要幾百毫秒。這太慢了嗎?

測試你的代碼。如果它實際上太慢,也許你可以使用不同的方法。有一些替代品here的討論。