我有一個很奇怪的問題。我有SQL Server數據庫,它返回大量的XML。在中間我有.Net C#代碼。在前面我有兩個項目,一個是WCF,另一個是控制檯應用程序(僅用於測試)。XDocument的XML反序列化太慢了
現在,當我運行代碼從數據庫獲取XML並使用控制檯應用程序對其進行反序列化時,它的運行速度非常快。但是當我通過WCF運行相同的代碼時,需要永遠反序列化XML。我相信,DB並不是這裏的瓶頸,但Serializer是。
我正在使用XmlSerializer。我無法切換到DataContractSerializer,因爲我有很多XML屬性需要處理。
編輯:
這是一個靜態類的序列化代碼:
public static T DeSerialize(String xml)
{
T dto = default(T);
try
{
XDocument parsedXML = XDocument.Parse(xml);
XmlSerializer serializer = new XmlSerializer(typeof(T));
serializer.UnknownAttribute += new XmlAttributeEventHandler(serializer_UnknownAttribute);
serializer.UnknownElement += new XmlElementEventHandler(serializer_UnknownElement);
serializer.UnknownNode += new XmlNodeEventHandler(serializer_UnknownNode);
serializer.UnreferencedObject += new UnreferencedObjectEventHandler(serializer_UnreferencedObject);
if (serializer.CanDeserialize(parsedXML.CreateReader()))
{
**--This is where everything gets stuck--**
dto = (T)serializer.Deserialize(parsedXML.CreateReader());
}
}
catch (Exception ex)
{
throw;
}
return dto;
}
然後,我剛纔有一個經理,讓說的WorkManager使用這種代碼:
Work work = Serialize<Work>.DeSerialize(xml);
並從控制檯應用程序和WCF項目調用上述語句。
接口爲:
[OperationContract]
[WebInvoke(
Method = "POST",
RequestFormat = WebMessageFormat.Xml, ResponseFormat = WebMessageFormat.Xml, BodyStyle = WebMessageBodyStyle.Bare,
UriTemplate = "Work")]
XElement Work(Stream contents);
和實現是:
public XElement Work(Stream contents)
{
String xml = new StreamReader(contents).ReadToEnd();
WorkManager workManager = new WorkManager();
workManager.Work(xml);
}
您可以發佈您的WCF的代碼,特別是你所在的部分做序列化,因爲你認爲這是瓶頸? –
請使用代碼查看更新後的帖子。 – user2483744