xmlaclient.Discover(MDSCHEMA_MODULES,...) System out of memory exception
When I try to drill down into a cube in our client application, I use xmlaclient.Discover method to discover the SSAS metadata. When I've drilled down to the about the 7th level I get a system out of memory exception. The stack trace is as below- This is running on a Windows 2008 serve开发者_如何学编程r, 2008 ssas server and the application is on a windows 7 machine (all 64 bit) and both the machines have 4gb of Ram.
StackTrace " at System.String.GetStringForStringBuilder(String value, Int32 startIndex, Int32 length, Int32 capacity)\r\n at System.Text.StringBuilder.GetNewString(String currentString, Int32 requiredLength)\r\n at System.Text.StringBuilder.Append(String value)\r\n at System.IO.StringWriter.Write(String value)\r\n at System.Xml.XmlTextWriter.InternalWriteEndElement(Boolean longFormat)\r\n at System.Xml.XmlTextWriter.WriteFullEndElement()\r\n at System.Xml.XmlReader.WriteNode(XmlTextWriter xtw, Boolean defattr)\r\n at System.Xml.XmlReader.ReadInnerXml()\r\n at Microsoft.AnalysisServices.Xmla.XmlaReader.ReadInnerXml()\r\n at Microsoft.AnalysisServices.Xmla.XmlaClient.SendMessageAndReturnResult(String& result, Boolean skipResult)\r\n at Microsoft.AnalysisServices.Xmla.XmlaClient.Discover(String requestType, String restrictions, String properties, String& result, Boolean skipResult, Boolean restrictionsXmlIsComplete, Boolean propertiesXmlIsComplete)\r\n at Meridium.XMLA.Client.XmlaClientCall.XmlaDiscover(String Discover_type, String restrictions, String properties, Boolean isRestrictionsComplete, Boolean isPropertiesComplete) in C:\MyData\Projects\APM V3\Source\Meridium\Metrics\XMLA\Client\XmlaClientCall.cs:line 44" string
Found the problem and a solution: The Microsoft.AnalysisServices.Xmla.dll assembly is both undocumented and unsupported.
The supported method for doing this would be to use the Microsoft.AnalysisServices.AdomdClient.dll assembly using the GetSchemaDataSet method and pass AdomdSchemaGuid.Members as the first parameter and the appropriate restriction object as the second parameter.
If using the earlier one, we need to create member unique name restriction and a tree_op restriction to prevent the memory footprint from growing further.
Nikhil
精彩评论