У меня есть клиент-серверное приложение, которое обменивает XML-документы на данные, запрошенные клиентом. По сути, пользователь вводит некоторые ограничения поиска (атрибуты для сопоставления), и клиент связывается с двумя системами для получения данных (некоторые данные из базы данных и некоторые данные с файловых серверов).
Данные, возвращаемые с файловых серверов (файлы архивных данных), немного больше метаданных, возвращаемых с сервера, и, соответственно, для их выполнения требуется больше времени.
Пользователи попросили меня предоставить некоторые метрики о том, сколько времени требуется для загрузки архивных данных и скорости их загрузки (после загрузки).
Клиентский сервер взаимодействует с асинхронным вводом-выводом и многочисленными потоками, поэтому я не могу просто использовать таймер запуска / остановки для этого.
Моя текущая реализация работает так:
- Запись текущих тиков (это длительный процесс, поэтому разрешение тиков в порядке)
- Асинхронно передать запрос в веб-службу.
- --- Подождите ---
- получить текущие тики
- получить размер возвращаемого документа (некоторые издержки не учитываются в конверте SOAP, но я думаю, это нормально)
- Оценить = (Размер документа / 1024) / (Конечные тики - Начальные тики) * Тики / Секунды (я позволяю объекту временного диапазона делать это)
Сначала я думал, что этот метод в порядке, но у меня есть пользовательское сообщение, что скорость для небольших выборок намного ниже, чем для больших выборок, и что скорости сильно варьируются в течение одного выполнения.
Есть ли лучший способ рассчитать этот показатель, который был бы более защищен от этого? Имеет смысл, что скорость будет выше для больших архивов, но в тестировании я вижу, что она в 10-40 раз выше, чем для файла, размер которого не имеет смысла.