После долгих поисков, пытаясь найти лучшее решение для использования встроенной базы данных в моем приложении WPF, я, наконец, остановился на/обнаружил легкость использования MS Access DB. Я играл с SQL, но в основном продолжал сталкиваться с ошибками и проблемами, которые Access в конечном итоге решал. Поэтому, чтобы использовать DB после импорта, я просто перетащил DataSet в окно WPF, а VS создал кучу кода, который разрешил доступ. Он работает красиво.MS Access DB время поиска/производительность
Существует только одна проблема: при поиске таблицы ZipCode программа останавливается на 4-5 секунд, включая зависание между нажатиями клавиш. Это требует некоторой простоты использования, и я хотел бы найти способ ускорить это.
Я думал об использовании BackgroundWorker, но я не могу понять, как передать ему команды только в соответствующие моменты времени. Я даже не уверен, что это лучшее решение, или если есть другой способ увеличить скорость.
В файле DB zipcodes функционирует как основной ключ, и у меня есть оба столбца (индекс zipcode &), также это не улучшило производительность. Доступ к двум приведенным ниже функциям осуществляется через событие OnTextChanged различных текстовых полей.
Любые предложения будут очень благодарны.
public void LocateZipCode(TextBox source, TextBox destination)
{
LocationsDataSet locationsDataSet = ((LocationsDataSet)this.FindResource("locationsDataSet"));
// Load data into the table ZipCodes. You can modify this code as needed.
LocationsDataSetTableAdapters.ZipCodesTableAdapter locationsDataSetZipCodesTableAdapter = new LocationsDataSetTableAdapters.ZipCodesTableAdapter();
locationsDataSetZipCodesTableAdapter.Fill(locationsDataSet.ZipCodes);
CollectionViewSource zipCodesViewSource = ((CollectionViewSource)(this.FindResource("zipCodesViewSource")));
zipCodesViewSource.View.MoveCurrentToFirst();
try
{
if (source.Text.Length == 5)
{
destination.Text = locationsDataSet.ZipCodes.FindByZipCode(source.Text).Location.ToString();
}
}
catch (NullReferenceException)
{
}
}
#region Area Code Lookup
public void LocateAreaCode(TextBox source, TextBox destination, TextBox destination2 = null)
{
LocationsDataSet locationsDataSet = ((LocationsDataSet)(this.FindResource("locationsDataSet")));
// Load data into the table AreaCodes. You can modify this code as needed.
LocationsDataSetTableAdapters.AreaCodesTableAdapter locationsDataSetAreaCodesTableAdapter = new LocationsDataSetTableAdapters.AreaCodesTableAdapter();
locationsDataSetAreaCodesTableAdapter.Fill(locationsDataSet.AreaCodes);
CollectionViewSource areaCodesViewSource = ((CollectionViewSource)(this.FindResource("areaCodesViewSource")));
areaCodesViewSource.View.MoveCurrentToFirst();
try
{
if (source.Text.Length >= 3 && destination2 != null) //Info tab area code check
{
destination.Text = locationsDataSet.AreaCodes.FindByArea_Code(source.Text).Location.ToString();
destination2.Text = locationsDataSet.AreaCodes.FindByArea_Code(source.Text).Time_Zone.ToString();
}
else if (source.Text.Length >= 3 && destination.Text.Length == 0 && destination2 == null) //Other area code checks
{
destination.Text = locationsDataSet.AreaCodes.FindByArea_Code(source.Text).Location.ToString();
}
else if (source.Text.Length < 3 && destination2 != null) //Info tab area code check
{
destination.Text = "";
destination2.Text = "";
}
else if (source.Text.Length < 3 && destination.Text.Length == 0 && destination2 == null) //Other area code checks
{
destination.Text = "";
if (destination2 != null)
{
destination2.Text = "";
}
}
}
catch (NullReferenceException)
{
destination.Text = "Invalid Area Code";
if (destination2 != null)
{
destination2.Text = "";
}
}
}
#endregion