Если вы можете использовать Javascript ... Используйте решение @Temani Afif, если не можете
Array.from(document.querySelectorAll('.optionnal')).forEach(el => {
// If the text of "Optionnal" is greater than 84, then ellipse it...
el.innerText = el.innerText.length > 84 ? el.innerText.slice(0, 84) + '...' : el.innerText
})
.title {
width : 250px;
height : 70px;
overflow : show;
border : 1px solid black;
}
.stay {
color : red;
}
<h3 class="title">
<span class="optionnal" >This is a test</span>
<span class="stay"> I MUST STAY</span>
</h3>
<h3 class="title">
<span class="optionnal">This is a test This is a test This is a test This is a testThis is a test This is a testThis is a test This is a testThis is a test This is a testThis is a test This is a testThis is a test This is a testThis is a test This is a test</span>
<span class="stay"> I MUST STAY</span>
</h3>
<h3 class="title">
<span class="optionnal">This is a test This is a test This is a test This is a testThis is a test This is a...</span>
<span class="stay"> I MUST STAY</span>
</h3>
Я не верю так, нет - по крайней мере, не в ванильной.NET. Я подозреваю, что это не фактическая выборка имен, которая занимает время - это - ОС, идущая через внутренности каталога. Может быть вызов Win32, который Вы могли выполнить через P/Invoke.
Насколько большой каталог, на который Вы смотрите? В целом это по крайней мере традиционно не была хорошая идея иметь больше чем несколько сотен файлов в каталоге. Файловые системы улучшились в этом в целом, но я не знаю то, что текущее состояние с NTFS и Fat32.
Нет никакого более быстрого пути. Независимо от того, что Вы используете, все это сводится к FindFirstFile
и FindNextFile
Вызовы Win32.
Вы могли попытаться использовать что-то вроде этого, но, вероятно, потребуется такое же время - но возможно с немного меньшим количеством использования памяти (=, вероятно, не стоящий того).
Я действительно немного тестировал - записал ту же задачу в C++ / спокойный и C++ / CLI:
LARGE_INTEGER i1, i2;
QueryPerformanceCounter(&i1);
int count = IO::Directory::GetFiles(L"c:\\windows\\system32")->Length;
QueryPerformanceCounter(&i2);
__int64 result = i2.QuadPart - i1.QuadPart;
Результат - приблизительно 16 500 000
и
LARGE_INTEGER i1, i2;
QueryPerformanceCounter(&i1);
intcount = QDir("c:/windows/system32").entryList(QDir::Files).count();
QueryPerformanceCounter(&i2);
__int64 result += i2.QuadPart - i1.QuadPart;
Результат - приблизительно 2 100 000 000
Количество файлов 2125
До сих пор на большинстве языков я столкнулся, Вы получаете эту информацию только путем обхода папки и подсчета файлов. Я сомневаюсь, что существует Windows API call для получения только количества (но я могу быть удивлен!).
Преимущество метода: гибкость - можно отфильтровать некоторые типы файлов, спуск рекурсивно или проигнорировать папки и т.д.
Если метод является медленным для Вас, возможно, необходимо получить лучший метод, как не создание массива, заполненного информацией о каталоге (занимает время для заполнения его! не говоря уже о стоимости памяти и время сборки "мусора"), но использование итератора: немного больше работы (но после того как Вы получаете функцию, это всегда там), но намного более эффективный.