2011-09-07 49 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