20.05.2008, 14:50 | #1 |
Участник
|
Будьте осторожны с RecordInsertList
1) Создаю таблицу новую (Table1)
2) Создаю текстовое поле (field1) (string 10 по умолчанию) 3) В insert таблицы пишу. X++: public void insert() { super(); info("ttttttttttttttttttttttttttttttttttttttttttt"); } X++: static void Job14(Args _args) { RecordInsertList recordInsertList = new RecordInsertList(tablenum(Table1)); Table1 table1; int i; ; for(i=0;i<4000;i++) { table1.Field1 = int2str(i); info(table1.Field1); recordInsertList.add(table1); } recordInsertList.insertDatabase(); } Провожу экспиримент сначала. Только коментирую insertDatabase(). Те которые уже сбросились так и остались в таблице до 3203, а которые не успели в таблицу не попали. Расширяю поле в таблице до 20 знаков. Снова провожу экспиримент, цифры сброса уже другие 743, 1487, 2231, 2975, 3719. Если взять например класс xRefCreate метод updateDBReferences, то X++: if (!xRefReferences::find(phantomCallReference.xRefNameRecId, phantomCallReference.xRefPathRecId))
{
recordInsertList.add(phantomCallReference);
} А ведь может выйти такая ситуация. Сбрасываем десять записей, на восьмой буфер переполнился и произошёл сброс. В той строке которую я написал находиться 9 строка, в базе её ещё нет. А в буфере она есть так как не было сброса. Добавляем в буфер 9 строку повторно и на insert database они обе идут в таблицу. Просто у меня стоит локально Ax 3.0 sp1 и мало того что перекрёстные ссылки считаются 8 часов, так они ещё и задваиваются кое-где. На Ax 3.0 sp4 (не локально трёх звенка) задвоений нет, и считается быстро. Хотя классы xRefCreate и xRefUpdate одинаковые. И думаю возможно причина здесь. Пока не знаю, до конца ещё не докопал. Но впечатление, что человек писаший обновление перекрёстных ссылок не знал о подобном эффекте (преждевременного сброса буфера). Но ведь такие места наверное есть и вдругих местах. Вообщем будь те осторожны с recordInsertList, на верное его из-за этого и убрали из Ax 2009. aEremenko: DAX 2009, работа с несколькими компаниями |
|
|
За это сообщение автора поблагодарили: mazzy (2), Wamr (3). |