2009-12-29 101 views
0

我一直在編寫應用程序最近在c#中使用大量的內存或堆棧溢出,因爲以有趣的方式處理大量的數據。有更適合這種類型的語言嗎?我會從學習不同的語言(C++除外)中獲益嗎?堆棧溢出/內存不足

回答

10

C#不是問題。您可能需要重新考慮處理內存和數據的「有趣方式」。在這裏提供具體的場景和問題,以獲得您可能在您的應用程序中使用的潛在問題方法和策略的具體答案和替代方案。

1

如果您正在處理大型數據集並進行功能操作,您可以考慮查看F#或Haskell等函數式語言。

不會像遞歸問題那樣容易受到影響。

但是這些語言不會取代良好的設計和注意你如何做你的操作。有可能C#完全適合您的問題,您可能只需重構如何處理問題空間。

1

IDL(交互式數據語言)特別適用於類似矩陣的大型數據集。但是,您必須注意使用矩陣或向量操作,而不是順序循環。

如果授權是一個問題,您可以嘗試免費克隆GDL,但它可能不如IDL那麼快。

您的數據有多大?

2

如果在32位系統上運行.Net會在您消耗〜800mb時開始向您提供內存不足異常。這是因爲它需要分配連續的內存塊。如果您有一個需要擴展的數組或列表,它會將舊內容複製到一個新的內容,從而同時分配兩個實例。

如果你可以運行64位,那麼你會在大於2GB及以上的任何內容上遇到異常,這些都取決於你的應用程序的工作方式以及還有哪些運行。

對於比你的物理內存大的數據,我會推薦內存映射文件,或者做一些磁盤/內存交換。