- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 dotnetRDF 框架和 C# 为患者导出海龟格式的图形,为每个患者创建一个海龟文件。在大约 400 名患者之后,程序由于内存问题而停止。每个海龟文件在 2 - 150 MB 之间。如任务管理器中所示,该程序在 100 名患者后占用大约 4GB 的内存,在 500 名患者后占用 19GB 的内存。
我在导出类中有一个函数,它从 MSSQL 服务器读取数据,创建图形,最后使用 CompressingTurtleWriter 创建带有图形的海龟文件。
private int ExportPatient(string SubjectPseudoId)
{
Graph exportGraph = new Graph();
AddNamespaces(exportGraph);
// for each type of predicate
{
// read data from SQL (SqlConnection, SqlCommand and reader are using the using(){} statement)
// for each datareader
{
// save values in subjectvalue, predicatevalue, objectvalue strings
switch (objecttype)
{
case "string":
exportGraph.Assert(new Triple(exportGraph.CreateUriNode(prefixRessource + EncodeIRI(dataprovidervalue + "-" + semanticDefinition.ClassName + "-" + subjectvalue)),
exportGraph.CreateUriNode(semanticDefinition.AttributePrefixId + ":" + semanticDefinition.AttributeName),
exportGraph.CreateLiteralNode(objectvalue, new Uri(XmlSpecsHelper.XmlSchemaDataTypeString))));
break;
case "double":
exportGraph.Assert(new Triple(exportGraph.CreateUriNode(prefixRessource + EncodeIRI(dataprovidervalue + "-" + semanticDefinition.ClassName + "-" + subjectvalue)),
exportGraph.CreateUriNode(semanticDefinition.AttributePrefixId + ":" + semanticDefinition.AttributeName),
exportGraph.CreateLiteralNode(objectvalue, new Uri(XmlSpecsHelper.XmlSchemaDataTypeDouble))));
break;
case "datetime":
exportGraph.Assert(new Triple(exportGraph.CreateUriNode(prefixRessource + EncodeIRI(dataprovidervalue + "-" + semanticDefinition.ClassName + "-" + subjectvalue)),
exportGraph.CreateUriNode(semanticDefinition.AttributePrefixId + ":" + semanticDefinition.AttributeName),
exportGraph.CreateLiteralNode(objectvalue, new Uri(XmlSpecsHelper.XmlSchemaDataTypeDateTime))));
break;
case "uri":
exportGraph.Assert(new Triple(exportGraph.CreateUriNode(prefixRessource + EncodeIRI(dataprovidervalue + "-" + semanticDefinition.ClassName + "-" + subjectvalue)),
exportGraph.CreateUriNode(semanticDefinition.AttributePrefixId + ":" + semanticDefinition.AttributeName),
exportGraph.CreateUriNode(prefixRessource + EncodeIRI(dataprovidervalue + "-" + semanticDefinition.Range + "-" + objectvalue)))); //
break;
default:
log.Warn("undefined objecttype=" + objecttype, process, runConfig.Project);
break;
} // switch
} // for each datareader
} // for each predicate
// all the triplets are added to the graph, write it to the turtle file now.
CompressingTurtleWriter turtlewriter = new CompressingTurtleWriter(5, TurtleSyntax.W3C);
turtlewriter.PrettyPrintMode = true;
turtlewriter.Save(exportGraph, CreateFileName(SubjectPseudoId));
// dispose of the graph class
exportGraph.Dispose();
}
// return control to the calling function to process the next patient
// take the next SubjectPseudoId and call the function again until array is processed.
到目前为止,我尝试过的是处置或完成 CompressingTurtleWriter,但这两种方法都不存在,即使是那些
https://www.dotnetrdf.org/api/html/T_VDS_RDF_Writing_CompressingTurtleWriter.htm#!建议 CompressingTurtleWriter 有一个 protected Finalize() 方法。
exportGraph.Dispose();
之后创建了一个快照。它在提取 15 后显示:
Object Type Count Size(Bytes) InclusiveSize (Bytes)
VDS.Common.Tries.SparseCharacterTrieNode<Uri> 5'823'385 326'109'560 1'899'037'768
在提取 25 之后:
Object Type Count Size(Bytes) InclusiveSize (Bytes)
VDS.Common.Tries.SparseCharacterTrieNode<Uri> 11'882'772 665'435'232 1'540'054'160
在任务管理器中,程序在 25 次提取后使用了 1'646'964 K,而在程序开始时使用了大约 250'000 K。
VDS.Common.Tries.SparseCharacterTrieNode<Uri>
还在堆里?
最佳答案
我认为问题在于 dotNetRDF 正在缓存在创建每个图期间创建的所有 URI,并且该缓存是全局缓存。我建议设置 VDS.RDF.Options.InternUris
在开始处理之前设置为 false - 这是一个全局设置,因此只需在程序开始时执行一次。
您还可以通过选择简单的索引(将 VDS.RDF.Options.FullTripleIndexing
设置为 false)或使用 NonIndexedGraph
来减少每个单独图形的内存使用量。而不是默认 Graph
实现(这是假设您所做的只是生成然后序列化图形)。有一些tips on reducing memory usage here .
关于c# - DotNetRDF:Graph 或 CompressingTurtleWriter 不释放内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65250963/
我正在使用 dotnetRDF 框架和 C# 为患者导出海龟格式的图形,为每个患者创建一个海龟文件。在大约 400 名患者之后,程序由于内存问题而停止。每个海龟文件在 2 - 150 MB 之间。如任
我是一名优秀的程序员,十分优秀!