我有一個接受XML文件傳輸的ASP.NET 4.0 Web服務。在過去(使用相同Web服務的不同實現),我們使用時間戳跟蹤了併發性(同時接收/處理的XML文件的數量)。我已經在Web服務的新版本,例如複製此行爲:跟蹤具有時間戳的併發Web服務請求
在構造函數中的Web服務類使用我HttpContext.Current.Timestamp
public class MyWebService : System.Web.Services.WebService
{
public MyWebService()
{
ConnectionStartTime = HttpContext.Current.Timestamp
}
}
記錄ConnectionStartTime
我做處理中的XML文件後WebMethod
我將文件插入數據庫(記錄ConnectionEndTime
)並將響應返回給用戶。我在新的Thread
中執行數據庫插入,因此最終用戶不必等待插入發生才能收到其響應。
new Thread (() =>
{
insertIntoDatabase(ConnectionStartTime, ConnectionEndTime=Datetime.Now, xmlFile);
}).Start();
return responseToUser;
現在我想要衡量我們多少個併發XML傳輸兩種方法達到:
1.性能計數器
- ASP.NET應用程序V4.0 \ Requests Executing - 此計數器達到峯值52.
- ASP.NET Apps v4.0 \ Requests Queued - 此計數器達到峯值19.
對我來說,這意味着我應該看到一個點,我們有33個記錄重疊ConnectionStartTime
和ConnectionEndTime
。
2.查詢反對時間戳 - 在this question我引用我使用來計算基於ConnectionStartTime
和ConnectionEndTime
並行傳輸的數量查詢。這些是SQL Server數據庫中的datetime
字段。 注意:該問題中的查詢是我們在過去3年中用來確定併發性的算法的返工版本,因此它可能不是100%正確的,但算法的其他實現(Excel宏等)已經過驗證。
我的問題是兩個方法永遠不會對齊。查詢時間戳的最大結果爲10,而性能計數器顯示最大值應爲30+。我很難找到差異在哪裏。我在記錄時間戳的過程中犯了錯誤嗎? HttpContext.Current.Timestamp
值是否不記錄傳輸到Web服務的開始? 。
不確定是否相關,但是......除非您有一個真正的好理由,否則不要在ASPNET中使用Thread.Start()。使用線程池。 http://stackoverflow.com/questions/684640/advantage-of-using-thread-start-vs-queueuserworkitem – Cheeso 2011-04-29 15:01:59
感謝您的提示。不確定它是否影響時間戳問題,但仍有改進。 – 2011-04-29 15:13:00