2011-09-07 55 views
2

我正在用C#編寫一個Sql客戶端,並希望能夠在一個點上跟蹤Sql命令的數據使用情況。從我可以告訴的是,沒有簡單的方法來做到這一點。C#SqlCommand字節傳輸大小

我的函數來獲取數據從後面的SqlCommand看起來是這樣的:

private static void ExecuteReaderCallback(IAsyncResult async) 
{ 
    DBReqWrapper RequestObject = (DBReqWrapper)async.AsyncState; 
    SqlDataReader ResponseReader = command.EndExecuteReader(async); 
    if (ResponseReader.HasRows) 
    { 
      while (ResponseReader.Read()) 
     { 
       object[] NewResponse = new object[ResponseReader.FieldCount]; 
       ResponseReader.GetValues(NewResponse); 

       // Processing omitted 
     } 
    } 

    ResponseReader.Close(); 
} 

我不認爲會有什麼工作:

  1. 序列化的數據,以找出大小。太慢,特別是對於大量請求。
  2. sizeof。我們正在處理未知類型的對象。
  3. Marshal.sizeof。我們正在處理託管對象。
  4. 檢查應用程序總內存。這是一個多線程應用程序,它將處理許多併發請求,並且內存總數不可靠。
  5. SqlDataReader :: GetBytes()。該命令僅對類型的子集有效。

任何幫助表示讚賞,謝謝!

+0

爲什麼GetBytes()只對子類型有效? – Tigran

回答

1

如果您想要統計「網絡」中有多少數據流,那麼這些數據都不會真正起作用。 SQL Server使用稱爲TDS的協議(Tabular Data Stream)作爲其應用程序級別的連線格式。

我認爲性能計數器可能是你的朋友。

+0

絕對PerformanceCounters。 – albertjan