Моим сервером является Dell R320, 12 ядра, сторожевой дренаж ЦП в большой степени, в среднем. 68%-е использование ЦП.
Добавляют, что следующие драйверы для помещения в черный список конфигурационного файла /etc/modprobe.d/blacklist.conf
решили мою проблему
blacklist acpi_pad blacklist mei blacklist sb_edac blacklist i7core_edac
Возможно, это не лучший способ делать что-то, но он должен работать:
this.textBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
this.textBox1.AutoCompleteSource = AutoCompleteSource.CustomSource;
private void textBox1_TextChanged(object sender, EventArgs e)
{
TextBox t = sender as TextBox;
if (t != null)
{
//say you want to do a search when user types 3 or more chars
if (t.Text.Length >= 3)
{
//SuggestStrings will have the logic to return array of strings either from cache/db
string[] arr = SuggestStrings(t.Text);
AutoCompleteStringCollection collection = new AutoCompleteStringCollection();
collection.AddRange(arr);
this.textBox1.AutoCompleteCustomSource = collection;
}
}
}
Конечно, это зависит от того, как вы его реализуете, но, возможно, это хорошее начало:
using System.Windows.Forms;
public class AutoCompleteTextBox : TextBox {
private string[] database;//put here the strings of the candidates of autocomplete
private bool changingText = false;
protected override void OnTextChanged (EventArgs e) {
if(!changingText && database != null) {
//searching the first candidate
string typed = this.Text.Substring(0,this.SelectionStart);
string candidate = null;
for(int i = 0; i < database.Length; i++)
if(database[i].Substring(0,this.SelectionStart) == typed) {
candidate = database[i].Substring(this.SelectionStart,database[i].Length);
break;
}
if(candidate != null) {
changingText = true;
this.Text = typed+candidate;
this.SelectionStart = typed.Length;
this.SelectionLength = candidate.Length;
}
}
else if(changingText)
changingText = false;
base.OnTextChanged(e);
}
}
Я не уверен, что это работает очень хорошо, но я думаю, что база этого кода достаточно хороша.
Обратите внимание на свойства AutoCompleteSource
, AutoCompleteCustomSource
и AutoCompleteMode
.
textBox1.AutoCompleteMode = AutoCompleteMode.Suggest;
textBox1.AutoCompleteSource = AutoCompleteSource.CustomSource;
AutoCompleteStringCollection col = new AutoCompleteStringCollection();
col.Add("Foo");
col.Add("Bar");
textBox1.AutoCompleteCustomSource = col;
Обратите внимание, что конструктор позволяет вам это делать без написания кода ...
Вы можете присоединиться к событию KeyDown, а затем запросить в базе данных ту часть текста, которую пользователь уже ввел. Например, если пользователь вводит «Т», ищите вещи, которые начинаются с «Т». Затем, когда они вводят следующую букву, например «e», ищите в таблице вещи, которые начинаются с «Te».
Доступные элементы могут отображаться, например, в «плавающем» ListBox. Вам нужно будет разместить ListBox сразу под TextBox, чтобы они могли видеть доступные записи, а затем удалить ListBox, когда они закончат ввод.