В случае управляемых потоков сложность выполнения этого является градусом, больше, чем тот из собственных потоков. Это вызвано тем, что потоки CLR непосредственно не связываются с собственным потоком ОС. Другими словами, CLR может переключиться , справился поток от собственного потока до собственного потока, как это считает целесообразным. Функция Поток. BeginThreadAffinity обеспечивается для размещения управляемого потока в жестко регламентированный с собственным потоком ОС. В той точке Вы могли экспериментировать с использованием встроенного API для предоставления базовой собственной привязки процессора потока. Как все предполагают здесь, это не очень хорошая идея. На самом деле существует документация предложение, что потоки могут получить меньше времени обработки, если они ограничиваются единственным процессором или ядром.
можно также исследовать Система. Диагностика. Процесс класс. Там можно найти, что функция перечисляет потоки процесса как набор объекты ProcessThread. Этот класс имеет методы, чтобы установить ProcessorAffinity или даже установить , предпочел процессор - не уверенный, каково это.
Правовая оговорка: я испытал подобную проблему, где я думал, что ЦП был под используемым и исследовал много этого материала; однако, на основе всего, что я считал, казалось, что это, не была очень хорошая идея, как свидетельствуется комментариями, добавленными здесь также. Однако это все еще интересно и полезный опыт для экспериментирования.
Расширяя ответ jldupont, вы можете создать элемент упаковки на лету:
var target = document.getElementById('myElement');
var wrap = document.createElement('div');
wrap.appendChild(target.cloneNode(true));
alert(wrap.innerHTML);
Я клонирую элемент, чтобы избежать необходимости удалять и повторно вставлять элемент в фактический документ. Однако это может быть дорогостоящим, если под элементом, который вы хотите напечатать, будет очень большое дерево.
Сначала поместите элемент, который оборачивает рассматриваемый div
, поместите атрибут id
в элемент, а затем используйте getElementById
на нем: как только у вас есть файл, просто выполните 'e.innerHTML`, чтобы получить HTML.
=>
, а затем: Примечание , что
var e=document.getElementById("wrap");
var content=e.innerHTML;
externalHTML
не поддерживает кроссбраузерность.
Используйте externalHTML
:
var el = document.getElementById( 'foo' );
alert( el.outerHTML );
Если вам нужен более легкий размер, но более длинный сценарий, получите элементы innerHTML и создайте и клонируйте только пустой родительский элемент-
function getHTML(who,lines){
if(!who || !who.tagName) return '';
var txt, ax, str, el= document.createElement('div');
el.appendChild(who.cloneNode(false));
txt= el.innerHTML;
ax= txt.indexOf('>')+1;
str= txt.substring(0, ax)+who.innerHTML+ txt.substring(ax);
el= null;
return lines? str.replace(/> *</g,'>\n<'): str;
//easier to read if elements are separated
}
var el = document.getElementById('foo');
el.parentNode.innerHTML;
, поскольку externalHTML - это только IE, используйте эту функцию:
function getOuterHtml(node) {
var parent = node.parentNode;
var element = document.createElement(parent.tagName);
element.appendChild(node);
var html = element.innerHTML;
parent.appendChild(node);
return html;
}
создает фиктивный пустой элемент родительского типа и использует на нем innerHTML, а затем повторно присоединяет элемент обратно к обычному dom
Вам понадобится что-то подобное, чтобы он был кроссбраузерным .
function OuterHTML(element) {
var container = document.createElement("div");
container.appendChild(element.cloneNode(true));
return container.innerHTML;
}