Я написал быстрый тест один раз, чтобы оценить «на лету»:
public class Test1 {
// non-static nested
class Nested { }
// static nested
static class StaticNested { }
static long getFreeMemory () {
// waits for free memory measurement to stabilize
long init = Runtime.getRuntime().freeMemory(), init2;
int count = 0;
do {
System.out.println("waiting..." + init);
System.gc();
try { Thread.sleep(250); } catch (Exception x) { }
init2 = init;
init = Runtime.getRuntime().freeMemory();
if (init == init2) ++ count; else count = 0;
} while (count < 5);
System.out.println("ok..." + init);
return init;
}
Test1 () throws InterruptedException {
Object[] s = new Object[10000];
Object[] n = new Object[10000];
Object[] t = new Object[10000];
long init = getFreeMemory();
//for (int j = 0; j < 10000; ++ j)
// s[j] = new Separate();
long afters = getFreeMemory();
for (int j = 0; j < 10000; ++ j)
n[j] = new Nested();
long aftersn = getFreeMemory();
for (int j = 0; j < 10000; ++ j)
t[j] = new StaticNested();
long aftersnt = getFreeMemory();
System.out.println("separate: " + -(afters - init) + " each=" + -(afters - init) / 10000);
System.out.println("nested: " + -(aftersn - afters) + " each=" + -(aftersn - afters) / 10000);
System.out.println("static nested: " + -(aftersnt - aftersn) + " each=" + -(aftersnt - aftersn) / 10000);
}
public static void main (String[] args) throws InterruptedException {
new Test1();
}
}
Общая концепция - выделить объекты и измерить изменение свободного пространства кучи. Ключ getFreeMemory()
, который запрашивает выполнение GC и ожидает, что размер свободной кучи будет стабилизирован. Вывод выше:
nested: 160000 each=16
static nested: 160000 each=16
Это то, что мы ожидаем, учитывая поведение выравнивания и возможные служебные данные заголовка блока кучи.
Метод инструментария, подробно описанный в принятом ответе здесь Наиболее точный. Метод, который я описал, является точным, но только в контролируемых условиях, когда другие нити не создают / не отбрасывают объекты.
В итоге я запросил скрытые TextFields полей таксономии, используя термин ids:
<Where>
<Or>
<Contains><FieldRef Name='kf7aa880952e4699a9693b8b7379c884'/><Value Type='Text'>40e7b1fd-3892-4311-8428-6dbe77fc4ad7</Value></Contains>
<Contains><FieldRef Name='le11567cdf314372b377761db5f67b84'/><Value Type='Text'>40e7b1fd-3892-4311-8428-6dbe77fc4ad7</Value></Contains>
</Or>
</Where>
Я бы предложил использовать CAML Builder для построения вашего запроса.
Попробуйте следующее
<Where>
<Or>
<In>
<FieldRef Name='col1' />
<Values><Value Type='Text'>TAxTextValue</Value></Values>
</In>
<In>
<FieldRef Name='col2' />
<Values><Value Type='Text'>TAxTextValue</Value></Values>
</In>
</Or>
</Where>
Кто-то указал, что может быть ошибка, но вы не указали версию SP.
Спасибо
Truez
попробуйте что-нибудь подобное
<FieldRef LookupId='TRUE' Name='MyTaxonomyField' />
<Values>
<Value Type='Integer'>4</Value>
</Values>