Я пишу клиент Sql на C # и хотел бы иметь возможность отслеживать использование данных команд Sql в одной точке. Из того, что я могу сказать, нет простого способа сделать это.
Моя функция получения данных от 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();
}
То, что я не думаю, будет работать:
- Сериализация данных для определения размера. Слишком медленно, особенно для больших запросов.
- SizeOf. Мы имеем дело с объектами неизвестного типа.
- Marshal.sizeof. Мы имеем дело с управляемыми объектами.
- Проверка общего объема памяти приложения. Это многопоточное приложение, в котором будет обрабатываться много одновременных запросов, а общее количество памяти будет ненадежным.
- SqlDataReader :: GetBytes (). Эта команда действительна только для подмножества типов.
Любая помощь приветствуется, спасибо!