堆栈溢出/内存不足

时间:2009-12-29 05:43:27

标签: c#

由于以有趣的方式处理大量数据,我最近在c#中编写了使用大量内存或堆栈溢出的应用程序。有没有更适合这种类型的语言?我可以从学习不同的语言(除了c ++之外)中受益吗?

4 个答案:

答案 0 :(得分:10)

C#不是问题。您可能需要重新考虑处理内存和数据的“有趣方式”。提供具体的方案和问题,以获得您可能在您的应用程序中使用的可能有问题的方法和策略的具体答案和替代方案。

答案 1 :(得分:2)

如果在32位系统上运行。当你消耗〜800mb时,.Net将开始给你内存异常。这是因为它需要分配连续的内存块。如果您有一个需要扩展的数组或列表,它会将旧内容复制到一个新内容,从而同时分配两个实例。

如果您可以运行64位,那么您将在~2GB及以上的任何内容中遇到异常,这取决于您的应用程序的工作方式以及正在运行的其他内容。

对于大于物理内存的数据,我建议使用内存映射文件,或进行一些磁盘/内存交换。

答案 2 :(得分:1)

如果您正在使用大型数据集并进行功能操作,您可以考虑使用F#或Haskell等函数式语言。

不会因递归问题而受苦。

然而这些语言不会取代良好的设计并关注您的操作方式。可能C#完全适合您的问题,您可能只需要重构如何处理问题空间。

答案 3 :(得分:1)

IDL(交互式数据语言)特别适用于大型矩阵式数据集。但是,您必须注意使用矩阵或向量运算而不是顺序循环。

如果许可是个问题,您可以尝试免费克隆GDL,尽管它可能没有IDL快。

您的数据有多大?