refactor: More consistently use using construct within WebUtil to match other existing code there.
							parent
							
								
									1f4f09ad69
								
							
						
					
					
						commit
						5fafea6631
					
				|  | @ -794,172 +794,166 @@ namespace OpenSim.Framework | |||
|             if (maxConnections > 0 && ht.ServicePoint.ConnectionLimit < maxConnections) | ||||
|                 ht.ServicePoint.ConnectionLimit = maxConnections; | ||||
| 
 | ||||
|             WebResponse response = null; | ||||
|             TResponse deserial = default(TResponse); | ||||
|             XmlSerializer deserializer = new XmlSerializer(typeof(TResponse)); | ||||
| 
 | ||||
|             request.Method = verb; | ||||
| 
 | ||||
|             MemoryStream buffer = null; | ||||
| 
 | ||||
|             if (verb == "POST") | ||||
|             try | ||||
|             { | ||||
|                 request.ContentType = "text/xml"; | ||||
| 
 | ||||
|                 buffer = new MemoryStream(); | ||||
| 
 | ||||
|                 XmlWriterSettings settings = new XmlWriterSettings(); | ||||
|                 settings.Encoding = Encoding.UTF8; | ||||
| 
 | ||||
|                 using (XmlWriter writer = XmlWriter.Create(buffer, settings)) | ||||
|                 if (verb == "POST") | ||||
|                 { | ||||
|                     XmlSerializer serializer = new XmlSerializer(type); | ||||
|                     serializer.Serialize(writer, obj); | ||||
|                     writer.Flush(); | ||||
|                 } | ||||
|                     request.ContentType = "text/xml"; | ||||
| 
 | ||||
|                 int length = (int)buffer.Length; | ||||
|                 request.ContentLength = length; | ||||
|                     buffer = new MemoryStream(); | ||||
| 
 | ||||
|                 if (WebUtil.DebugLevel >= 5) | ||||
|                     WebUtil.LogOutgoingDetail(buffer); | ||||
|                     XmlWriterSettings settings = new XmlWriterSettings(); | ||||
|                     settings.Encoding = Encoding.UTF8; | ||||
| 
 | ||||
|                 request.BeginGetRequestStream(delegate(IAsyncResult res) | ||||
|                 { | ||||
|                     Stream requestStream = request.EndGetRequestStream(res); | ||||
| 
 | ||||
|                     requestStream.Write(buffer.ToArray(), 0, length); | ||||
|                     requestStream.Close(); | ||||
| 
 | ||||
|                     // capture how much time was spent writing | ||||
|                     tickdata = Util.EnvironmentTickCountSubtract(tickstart); | ||||
| 
 | ||||
|                     request.BeginGetResponse(delegate(IAsyncResult ar) | ||||
|                     using (XmlWriter writer = XmlWriter.Create(buffer, settings)) | ||||
|                     { | ||||
|                         response = request.EndGetResponse(ar); | ||||
|                         Stream respStream = null; | ||||
|                         try | ||||
|                         { | ||||
|                             respStream = response.GetResponseStream(); | ||||
|                             deserial = (TResponse)deserializer.Deserialize( | ||||
|                                     respStream); | ||||
|                         } | ||||
|                         catch (System.InvalidOperationException) | ||||
|                         { | ||||
|                         } | ||||
|                         finally | ||||
|                         { | ||||
|                             // Let's not close this | ||||
|                             //buffer.Close(); | ||||
|                             respStream.Close(); | ||||
|                             response.Close(); | ||||
|                         } | ||||
| 
 | ||||
|                         action(deserial); | ||||
| 
 | ||||
|                     }, null); | ||||
|                 }, null); | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 request.BeginGetResponse(delegate(IAsyncResult res2) | ||||
|                 { | ||||
|                     try | ||||
|                     { | ||||
|                         // If the server returns a 404, this appears to trigger a System.Net.WebException even though that isn't | ||||
|                         // documented in MSDN | ||||
|                         response = request.EndGetResponse(res2); | ||||
|      | ||||
|                         Stream respStream = null; | ||||
|                         try | ||||
|                         { | ||||
|                             respStream = response.GetResponseStream(); | ||||
|                             deserial = (TResponse)deserializer.Deserialize(respStream); | ||||
|                         } | ||||
|                         catch (System.InvalidOperationException) | ||||
|                         { | ||||
|                         } | ||||
|                         finally | ||||
|                         { | ||||
|                             respStream.Close(); | ||||
|                             response.Close(); | ||||
|                         } | ||||
|                         XmlSerializer serializer = new XmlSerializer(type); | ||||
|                         serializer.Serialize(writer, obj); | ||||
|                         writer.Flush(); | ||||
|                     } | ||||
|                     catch (WebException e) | ||||
| 
 | ||||
|                     int length = (int)buffer.Length; | ||||
|                     request.ContentLength = length; | ||||
| 
 | ||||
|                     if (WebUtil.DebugLevel >= 5) | ||||
|                         WebUtil.LogOutgoingDetail(buffer); | ||||
| 
 | ||||
|                     request.BeginGetRequestStream(delegate(IAsyncResult res) | ||||
|                     { | ||||
|                         if (e.Status == WebExceptionStatus.ProtocolError) | ||||
|                         using (Stream requestStream = request.EndGetRequestStream(res)) | ||||
|                             requestStream.Write(buffer.ToArray(), 0, length); | ||||
| 
 | ||||
|                         // capture how much time was spent writing | ||||
|                         tickdata = Util.EnvironmentTickCountSubtract(tickstart); | ||||
| 
 | ||||
|                         request.BeginGetResponse(delegate(IAsyncResult ar) | ||||
|                         { | ||||
|                             if (e.Response is HttpWebResponse) | ||||
|                             using (WebResponse response = request.EndGetResponse(ar)) | ||||
|                             { | ||||
|                                 using (HttpWebResponse httpResponse = (HttpWebResponse)e.Response) | ||||
|                                 try | ||||
|                                 { | ||||
|                                     using (Stream respStream = response.GetResponseStream()) | ||||
|                                         deserial = (TResponse)deserializer.Deserialize(respStream); | ||||
|                                 } | ||||
|                                 catch (System.InvalidOperationException) | ||||
|                                 { | ||||
|                                 } | ||||
|                             } | ||||
| 
 | ||||
|                             action(deserial); | ||||
| 
 | ||||
|                         }, null); | ||||
|                     }, null); | ||||
|                 } | ||||
|                 else | ||||
|                 { | ||||
|                     request.BeginGetResponse(delegate(IAsyncResult res2) | ||||
|                     { | ||||
|                         try | ||||
|                         { | ||||
|                             // If the server returns a 404, this appears to trigger a System.Net.WebException even though that isn't | ||||
|                             // documented in MSDN | ||||
|                             using (WebResponse response = request.EndGetResponse(res2)) | ||||
|                             {    | ||||
|                                 try | ||||
|                                 { | ||||
|                                     using (Stream respStream = response.GetResponseStream()) | ||||
|                                         deserial = (TResponse)deserializer.Deserialize(respStream); | ||||
|                                 } | ||||
|                                 catch (System.InvalidOperationException) | ||||
|                                 { | ||||
|                                     if (httpResponse.StatusCode != HttpStatusCode.NotFound) | ||||
|                                     { | ||||
|                                         // We don't appear to be handling any other status codes, so log these feailures to that | ||||
|                                         // people don't spend unnecessary hours hunting phantom bugs. | ||||
|                                         m_log.DebugFormat( | ||||
|                                             "[ASYNC REQUEST]: Request {0} {1} failed with unexpected status code {2}", | ||||
|                                             verb, requestUrl, httpResponse.StatusCode); | ||||
|                                     } | ||||
|                                 } | ||||
|                             } | ||||
|                         } | ||||
|                         else | ||||
|                         catch (WebException e) | ||||
|                         { | ||||
|                             if (e.Status == WebExceptionStatus.ProtocolError) | ||||
|                             { | ||||
|                                 if (e.Response is HttpWebResponse) | ||||
|                                 { | ||||
|                                     using (HttpWebResponse httpResponse = (HttpWebResponse)e.Response) | ||||
|                                     {         | ||||
|                                         if (httpResponse.StatusCode != HttpStatusCode.NotFound) | ||||
|                                         { | ||||
|                                             // We don't appear to be handling any other status codes, so log these feailures to that | ||||
|                                             // people don't spend unnecessary hours hunting phantom bugs. | ||||
|                                             m_log.DebugFormat( | ||||
|                                                 "[ASYNC REQUEST]: Request {0} {1} failed with unexpected status code {2}", | ||||
|                                                 verb, requestUrl, httpResponse.StatusCode); | ||||
|                                         } | ||||
|                                     } | ||||
|                                 } | ||||
|                             } | ||||
|                             else | ||||
|                             { | ||||
|                                 m_log.ErrorFormat( | ||||
|                                     "[ASYNC REQUEST]: Request {0} {1} failed with status {2} and message {3}", | ||||
|                                     verb, requestUrl, e.Status, e.Message); | ||||
|                             } | ||||
|                         } | ||||
|                         catch (Exception e) | ||||
|                         { | ||||
|                             m_log.ErrorFormat( | ||||
|                                 "[ASYNC REQUEST]: Request {0} {1} failed with status {2} and message {3}", | ||||
|                                 verb, requestUrl, e.Status, e.Message); | ||||
|                                 "[ASYNC REQUEST]: Request {0} {1} failed with exception {2}{3}", | ||||
|                                 verb, requestUrl, e.Message, e.StackTrace); | ||||
|                         } | ||||
|                     } | ||||
|                     catch (Exception e) | ||||
|                     { | ||||
|                         m_log.ErrorFormat( | ||||
|                             "[ASYNC REQUEST]: Request {0} {1} failed with exception {2}{3}", | ||||
|                             verb, requestUrl, e.Message, e.StackTrace); | ||||
|                     } | ||||
|          | ||||
|                     //  m_log.DebugFormat("[ASYNC REQUEST]: Received {0}", deserial.ToString()); | ||||
|                         //  m_log.DebugFormat("[ASYNC REQUEST]: Received {0}", deserial.ToString()); | ||||
| 
 | ||||
|                     try | ||||
|                     { | ||||
|                         action(deserial); | ||||
|                     } | ||||
|                     catch (Exception e) | ||||
|                     { | ||||
|                         m_log.ErrorFormat( | ||||
|                             "[ASYNC REQUEST]: Request {0} {1} callback failed with exception {2}{3}", | ||||
|                             verb, requestUrl, e.Message, e.StackTrace); | ||||
|                     } | ||||
|                         try | ||||
|                         { | ||||
|                             action(deserial); | ||||
|                         } | ||||
|                         catch (Exception e) | ||||
|                         { | ||||
|                             m_log.ErrorFormat( | ||||
|                                 "[ASYNC REQUEST]: Request {0} {1} callback failed with exception {2}{3}", | ||||
|                                 verb, requestUrl, e.Message, e.StackTrace); | ||||
|                         } | ||||
|          | ||||
|                 }, null); | ||||
|             } | ||||
| 
 | ||||
|             int tickdiff = Util.EnvironmentTickCountSubtract(tickstart); | ||||
|             if (tickdiff > WebUtil.LongCallTime) | ||||
|             { | ||||
|                 string originalRequest = null; | ||||
| 
 | ||||
|                 if (buffer != null) | ||||
|                 { | ||||
|                     originalRequest = Encoding.UTF8.GetString(buffer.ToArray()); | ||||
| 
 | ||||
|                     if (originalRequest.Length > WebUtil.MaxRequestDiagLength) | ||||
|                         originalRequest = originalRequest.Remove(WebUtil.MaxRequestDiagLength); | ||||
|                     }, null); | ||||
|                 } | ||||
| 
 | ||||
|                 m_log.InfoFormat( | ||||
|                     "[ASYNC REQUEST]: Slow request {0} {1} {2} took {3}ms, {4}ms writing, {5}", | ||||
|                     reqnum, | ||||
|                     verb, | ||||
|                     requestUrl, | ||||
|                     tickdiff, | ||||
|                     tickdata, | ||||
|                     originalRequest); | ||||
|                 int tickdiff = Util.EnvironmentTickCountSubtract(tickstart); | ||||
|                 if (tickdiff > WebUtil.LongCallTime) | ||||
|                 { | ||||
|                     string originalRequest = null; | ||||
| 
 | ||||
|                     if (buffer != null) | ||||
|                     { | ||||
|                         originalRequest = Encoding.UTF8.GetString(buffer.ToArray()); | ||||
| 
 | ||||
|                         if (originalRequest.Length > WebUtil.MaxRequestDiagLength) | ||||
|                             originalRequest = originalRequest.Remove(WebUtil.MaxRequestDiagLength); | ||||
|                     } | ||||
| 
 | ||||
|                     m_log.InfoFormat( | ||||
|                         "[ASYNC REQUEST]: Slow request {0} {1} {2} took {3}ms, {4}ms writing, {5}", | ||||
|                         reqnum, | ||||
|                         verb, | ||||
|                         requestUrl, | ||||
|                         tickdiff, | ||||
|                         tickdata, | ||||
|                         originalRequest); | ||||
|                 } | ||||
|                 else if (WebUtil.DebugLevel >= 4) | ||||
|                 { | ||||
|                     m_log.DebugFormat( | ||||
|                         "[WEB UTIL]: HTTP OUT {0} took {1}ms, {2}ms writing", | ||||
|                         reqnum, tickdiff, tickdata); | ||||
|                 } | ||||
|             } | ||||
|             else if (WebUtil.DebugLevel >= 4) | ||||
|             finally | ||||
|             {  | ||||
|                 m_log.DebugFormat( | ||||
|                     "[WEB UTIL]: HTTP OUT {0} took {1}ms, {2}ms writing", | ||||
|                     reqnum, tickdiff, tickdata); | ||||
|                 if (buffer != null) | ||||
|                     buffer.Dispose(); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | @ -1056,11 +1050,6 @@ namespace OpenSim.Framework | |||
|                                     "[FORMS]: Exception occured on receiving {0} {1}: {2}{3}", | ||||
|                                     verb, requestUrl, e.Message, e.StackTrace); | ||||
|                             } | ||||
|                             finally | ||||
|                             { | ||||
|                                 if (respStream != null) | ||||
|                                     respStream.Close(); | ||||
|                             } | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|  | @ -1145,125 +1134,129 @@ namespace OpenSim.Framework | |||
|             request.Method = verb; | ||||
|             MemoryStream buffer = null; | ||||
| 
 | ||||
|             if ((verb == "POST") || (verb == "PUT")) | ||||
|             try | ||||
|             { | ||||
|                 request.ContentType = "text/xml"; | ||||
| 
 | ||||
|                 buffer = new MemoryStream(); | ||||
| 
 | ||||
|                 XmlWriterSettings settings = new XmlWriterSettings(); | ||||
|                 settings.Encoding = Encoding.UTF8; | ||||
| 
 | ||||
|                 using (XmlWriter writer = XmlWriter.Create(buffer, settings)) | ||||
|                 if ((verb == "POST") || (verb == "PUT")) | ||||
|                 { | ||||
|                     XmlSerializer serializer = new XmlSerializer(type); | ||||
|                     serializer.Serialize(writer, obj); | ||||
|                     writer.Flush(); | ||||
|                     request.ContentType = "text/xml"; | ||||
| 
 | ||||
|                     buffer = new MemoryStream(); | ||||
| 
 | ||||
|                     XmlWriterSettings settings = new XmlWriterSettings(); | ||||
|                     settings.Encoding = Encoding.UTF8; | ||||
| 
 | ||||
|                     using (XmlWriter writer = XmlWriter.Create(buffer, settings)) | ||||
|                     { | ||||
|                         XmlSerializer serializer = new XmlSerializer(type); | ||||
|                         serializer.Serialize(writer, obj); | ||||
|                         writer.Flush(); | ||||
|                     } | ||||
| 
 | ||||
|                     int length = (int)buffer.Length; | ||||
|                     request.ContentLength = length; | ||||
| 
 | ||||
|                     if (WebUtil.DebugLevel >= 5) | ||||
|                         WebUtil.LogOutgoingDetail(buffer); | ||||
| 
 | ||||
|                     try | ||||
|                     { | ||||
|                         using (Stream requestStream = request.GetRequestStream()) | ||||
|                             requestStream.Write(buffer.ToArray(), 0, length); | ||||
|                     } | ||||
|                     catch (Exception e) | ||||
|                     { | ||||
|                         m_log.DebugFormat( | ||||
|                             "[SynchronousRestObjectRequester]: Exception in making request {0} {1}: {2}{3}", | ||||
|                             verb, requestUrl, e.Message, e.StackTrace); | ||||
| 
 | ||||
|                         return deserial; | ||||
|                     } | ||||
|                     finally | ||||
|                     { | ||||
|                         // capture how much time was spent writing | ||||
|                         tickdata = Util.EnvironmentTickCountSubtract(tickstart); | ||||
|                     } | ||||
|                 } | ||||
| 
 | ||||
|                 int length = (int)buffer.Length; | ||||
|                 request.ContentLength = length; | ||||
| 
 | ||||
|                 if (WebUtil.DebugLevel >= 5) | ||||
|                     WebUtil.LogOutgoingDetail(buffer); | ||||
| 
 | ||||
|                 Stream requestStream = null; | ||||
|                 try | ||||
|                 { | ||||
|                     requestStream = request.GetRequestStream(); | ||||
|                     requestStream.Write(buffer.ToArray(), 0, length); | ||||
|                     using (HttpWebResponse resp = (HttpWebResponse)request.GetResponse()) | ||||
|                     { | ||||
|                         if (resp.ContentLength != 0) | ||||
|                         { | ||||
|                             using (Stream respStream = resp.GetResponseStream()) | ||||
|                             { | ||||
|                                 XmlSerializer deserializer = new XmlSerializer(typeof(TResponse)); | ||||
|                                 deserial = (TResponse)deserializer.Deserialize(respStream); | ||||
|                             } | ||||
|                         } | ||||
|                         else | ||||
|                         { | ||||
|                             m_log.DebugFormat( | ||||
|                                 "[SynchronousRestObjectRequester]: Oops! no content found in response stream from {0} {1}", | ||||
|                                 verb, requestUrl); | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|                 catch (WebException e) | ||||
|                 { | ||||
|                     using (HttpWebResponse hwr = (HttpWebResponse)e.Response) | ||||
|                     { | ||||
|                         if (hwr != null && hwr.StatusCode == HttpStatusCode.NotFound) | ||||
|                             return deserial; | ||||
|                         else | ||||
|                             m_log.ErrorFormat( | ||||
|                                 "[SynchronousRestObjectRequester]: WebException for {0} {1} {2}: {3} {4}", | ||||
|                                 verb, requestUrl, typeof(TResponse).ToString(), e.Message, e.StackTrace); | ||||
|                     } | ||||
|                 } | ||||
|                 catch (System.InvalidOperationException) | ||||
|                 { | ||||
|                     // This is what happens when there is invalid XML | ||||
|                     m_log.DebugFormat( | ||||
|                         "[SynchronousRestObjectRequester]: Invalid XML from {0} {1} {2}", | ||||
|                         verb, requestUrl, typeof(TResponse).ToString()); | ||||
|                 } | ||||
|                 catch (Exception e) | ||||
|                 { | ||||
|                     m_log.DebugFormat( | ||||
|                         "[SynchronousRestObjectRequester]: Exception in making request {0} {1}: {2}{3}", | ||||
|                         "[SynchronousRestObjectRequester]: Exception on response from {0} {1}: {2}{3}", | ||||
|                         verb, requestUrl, e.Message, e.StackTrace); | ||||
| 
 | ||||
|                     return deserial; | ||||
|                 } | ||||
|                 finally | ||||
|                 { | ||||
|                     if (requestStream != null) | ||||
|                         requestStream.Dispose(); | ||||
| 
 | ||||
|                     // capture how much time was spent writing | ||||
|                     tickdata = Util.EnvironmentTickCountSubtract(tickstart); | ||||
|                 } | ||||
|             } | ||||
| 
 | ||||
|             try | ||||
|             { | ||||
|                 using (HttpWebResponse resp = (HttpWebResponse)request.GetResponse()) | ||||
|                 int tickdiff = Util.EnvironmentTickCountSubtract(tickstart); | ||||
|                 if (tickdiff > WebUtil.LongCallTime) | ||||
|                 { | ||||
|                     if (resp.ContentLength != 0) | ||||
|                     string originalRequest = null; | ||||
| 
 | ||||
|                     if (buffer != null) | ||||
|                     { | ||||
|                         using (Stream respStream = resp.GetResponseStream()) | ||||
|                         { | ||||
|                             XmlSerializer deserializer = new XmlSerializer(typeof(TResponse)); | ||||
|                             deserial = (TResponse)deserializer.Deserialize(respStream); | ||||
|                         } | ||||
|                     } | ||||
|                     else | ||||
|                     { | ||||
|                         m_log.DebugFormat( | ||||
|                             "[SynchronousRestObjectRequester]: Oops! no content found in response stream from {0} {1}", | ||||
|                             verb, requestUrl); | ||||
|                         originalRequest = Encoding.UTF8.GetString(buffer.ToArray()); | ||||
| 
 | ||||
|                         if (originalRequest.Length > WebUtil.MaxRequestDiagLength) | ||||
|                             originalRequest = originalRequest.Remove(WebUtil.MaxRequestDiagLength); | ||||
|                     } | ||||
| 
 | ||||
|                     m_log.InfoFormat( | ||||
|                         "[SynchronousRestObjectRequester]: Slow request {0} {1} {2} took {3}ms, {4}ms writing, {5}", | ||||
|                         reqnum, | ||||
|                         verb, | ||||
|                         requestUrl, | ||||
|                         tickdiff, | ||||
|                         tickdata, | ||||
|                         originalRequest); | ||||
|                 } | ||||
|             } | ||||
|             catch (WebException e) | ||||
|             { | ||||
|                 using (HttpWebResponse hwr = (HttpWebResponse)e.Response) | ||||
|                 else if (WebUtil.DebugLevel >= 4) | ||||
|                 { | ||||
|                     if (hwr != null && hwr.StatusCode == HttpStatusCode.NotFound) | ||||
|                         return deserial; | ||||
|                     else | ||||
|                         m_log.ErrorFormat( | ||||
|                             "[SynchronousRestObjectRequester]: WebException for {0} {1} {2}: {3} {4}", | ||||
|                             verb, requestUrl, typeof(TResponse).ToString(), e.Message, e.StackTrace); | ||||
|                     m_log.DebugFormat( | ||||
|                         "[WEB UTIL]: HTTP OUT {0} took {1}ms, {2}ms writing", | ||||
|                         reqnum, tickdiff, tickdata); | ||||
|                 } | ||||
|             } | ||||
|             catch (System.InvalidOperationException) | ||||
|             finally | ||||
|             { | ||||
|                 // This is what happens when there is invalid XML | ||||
|                 m_log.DebugFormat( | ||||
|                     "[SynchronousRestObjectRequester]: Invalid XML from {0} {1} {2}", | ||||
|                     verb, requestUrl, typeof(TResponse).ToString()); | ||||
|             } | ||||
|             catch (Exception e) | ||||
|             { | ||||
|                 m_log.DebugFormat( | ||||
|                     "[SynchronousRestObjectRequester]: Exception on response from {0} {1}: {2}{3}", | ||||
|                     verb, requestUrl, e.Message, e.StackTrace); | ||||
|             } | ||||
| 
 | ||||
|             int tickdiff = Util.EnvironmentTickCountSubtract(tickstart); | ||||
|             if (tickdiff > WebUtil.LongCallTime) | ||||
|             { | ||||
|                 string originalRequest = null; | ||||
| 
 | ||||
|                 if (buffer != null) | ||||
|                 { | ||||
|                     originalRequest = Encoding.UTF8.GetString(buffer.ToArray()); | ||||
| 
 | ||||
|                     if (originalRequest.Length > WebUtil.MaxRequestDiagLength) | ||||
|                         originalRequest = originalRequest.Remove(WebUtil.MaxRequestDiagLength); | ||||
|                 } | ||||
| 
 | ||||
|                 m_log.InfoFormat( | ||||
|                     "[SynchronousRestObjectRequester]: Slow request {0} {1} {2} took {3}ms, {4}ms writing, {5}", | ||||
|                     reqnum, | ||||
|                     verb, | ||||
|                     requestUrl, | ||||
|                     tickdiff, | ||||
|                     tickdata, | ||||
|                     originalRequest); | ||||
|             } | ||||
|             else if (WebUtil.DebugLevel >= 4) | ||||
|             { | ||||
|                 m_log.DebugFormat( | ||||
|                     "[WEB UTIL]: HTTP OUT {0} took {1}ms, {2}ms writing", | ||||
|                     reqnum, tickdiff, tickdata); | ||||
|                     buffer.Dispose(); | ||||
|             } | ||||
| 
 | ||||
|             return deserial; | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue