Показать сообщение отдельно
Старый 07.08.2009, 13:31   #6  
SRF is offline
SRF
Участник
MCBMSS
Axapta Retail User
 
376 / 562 (19) +++++++
Регистрация: 08.08.2007
Записей в блоге: 1
Цитата:
Сообщение от kashperuk Посмотреть сообщение
Ну, приближенно можно посчитать с помощью метода fieldSize() на SysDictField:

X++:
static void Job2(Args _args)
{
    SysDictTable dictTable = SysDictTable::newName(tableStr(InventTable));
    SysDictField dictField;
    Counter      fieldCnt;
    int          recordSize;
    ;
    for (fieldCnt = 1; fieldCnt <= dictTable.fieldCnt(); fieldCnt++)
    {
        dictField = SysDictField::newName(dictTable.name(), dictTable.fieldName(dictTable.fieldCnt2Id(fieldCnt)));
        recordSize += dictField.fieldSize();
    }
    info(int2str(recordSize));
}
p.s. надо конечно учитывать все типы и array поля и т.д.
плюс служебную информацию заголовка сообщения при передаче по сети.
Вообще конечно, есть аналогичный метод на SysDictTable - recordSize - делает все то, что в job'е, только вот сильно приближенный результат получается

Например, fieldSize считает, что поля типа Enum занимают 1 байт, а в реальности все 4 (DAX 4.0 MS SQL 2005)
X++:
        case Types::Enum:
            size = 1;
            break;
Для типа Date и DateTime - считает, что всего используется по 4 байта
X++:
        case Types::Date:
        case Types::DateTime:
        case Types::Integer:
            size = 4;
            break;
Но на самом деле там все 8 (в смысле на MS SQL Server)

Так, что я бы с осторожностью считал размер записи данным способом

Кстати, еще есть размер записи в таблице трассировки SQL операторов Администирование\Запросы\База данных\Журнал трассировки операторов SQL, вкладка Разное, только не понятно, насколько этот параметр соотвествует действительности и пронаблюдать его значение можно, только в случае есть SQL оператор попал в трассировку (но все таки этому параметру я доверяю больше, чем SysDictTable\recordSize)

P.S. Не видел предыдущего сообщения когда писал
__________________
Sergey Nefedov

Последний раз редактировалось SRF; 07.08.2009 в 13:39. Причина: p.s.