Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 加载大型DBpedia转储时出现内存不足异常_C#_.net_Out Of Memory_Dbpedia_Dotnetrdf - Fatal编程技术网

C# 加载大型DBpedia转储时出现内存不足异常

C# 加载大型DBpedia转储时出现内存不足异常,c#,.net,out-of-memory,dbpedia,dotnetrdf,C#,.net,Out Of Memory,Dbpedia,Dotnetrdf,我试图将大量dbpedia数据加载到我的C#应用程序中,每次加载时都会出现内存不足的情况 这些文件是非常大的文本文件,包含数百万条记录,每个文件的大小都超过250MB(其中一个实际上是7GB!!),当我尝试将250MB的文件加载到我的应用程序时,它会等待大约10秒钟,在此期间我的RAM(6GB,最初使用@2GB)增加到5GB左右,然后程序抛出内存不足异常 我知道内存不足异常是关于相邻的空内存块的,我想知道如何将这样一个文件加载到我的程序中 这是我用来加载文件的代码,我正在使用库 dotNetRD

我试图将大量dbpedia数据加载到我的C#应用程序中,每次加载时都会出现内存不足的情况

这些文件是非常大的文本文件,包含数百万条记录,每个文件的大小都超过250MB(其中一个实际上是7GB!!),当我尝试将250MB的文件加载到我的应用程序时,它会等待大约10秒钟,在此期间我的RAM(6GB,最初使用@2GB)增加到5GB左右,然后程序抛出内存不足异常

我知道内存不足异常是关于相邻的空内存块的,我想知道如何将这样一个文件加载到我的程序中

这是我用来加载文件的代码,我正在使用库


dotNetRDF的设计根本不是为了处理内存存储中的大量数据。它的所有数据解析都是流式的,但是您必须构建内存结构来存储数据,这会占用所有内存并导致OOM异常

默认情况下,三元组是完全索引的,因此可以使用SPARQL和当前版本的库高效地进行查询,每个三元组大约需要1.7kb,因此该库最多允许您在内存中处理200-300万个三元组,具体取决于可用RAM。与此相关的是,当前版本中的SPARQL算法在这种规模上非常糟糕,因此即使您可以将数据加载到内存中,也无法有效地查询它

虽然该库的下一个版本确实减少了内存使用并极大地提高了SPARQL性能,但它仍然从未针对如此大的数据量设计过


但是dotNetRDF确实支持各种各样的本机三元组存储(请参阅接口及其实现),因此您应该使用存储本机加载机制(比通过dotNetRDF加载更快)将DBPedia转储加载到适当的存储中然后将dotNetRDF简单地用作客户端,通过它进行查询

250MB的文件不占用3GB。。如何加载文件?我使用的是一个名为dotNetRDF的库,它从文件中加载三元组存储,如果找不到一种不首先加载整个数据库的方法,TripleStore类中有一个名为loadFromFile()的函数,您可以尝试添加更多交换。可能是单个进程在您的系统上被限制为3GB或4GB。大多数32位进程只有在使用一些扩展内存的情况下才能运行。@richard,32位进程的地址空间通常限制为2GB。
TripleStore temp = new TripleStore();
//adding Uris to the store
temp.LoadFromFile(@"C:\MyTripleStore\pnd_en.nt");