Я сделал программу, которая загружает кучу компьютерной информации. В событии Form_Load у меня есть инициализация 3 (это число будет расти) панелей информации. Тот, у кого есть куча информации об устройстве, похоже, делает загрузку программы довольно медленной. Я пытался ускорить его, переключившись с WMI на использование Native-вызовов, что помогло связке. Вскоре, хотя я собираюсь разместить информацию о сети. Я использовал эту панель, но я немного ее отключил, пока не выясню ошибки на других панелях. Поэтому, изучая, как я могу использовать отдельный поток для обновления информации о батарее, я решил, что могу создать отдельные потоки на панели информации об устройстве, чтобы она могла загружаться быстрее. Я не знаю, что любая из моих данных вызовет параллельные проблемы, но я могу поработать над этим.Многопоточность, чтобы ускорить время загрузки
Я хочу начать с малыми, так что, если я изменить это
private void Form1_Load(object sender, EventArgs e)
{
unitInformationPanel1.PopulateUnitInformation();
batteryInformationPanel1.InitializeBatteries();
magStripeReaderPanel1.SetupPointOfSale();
}
к этому
private void Form1_Load(object sender, EventArgs e)
{
Thread infoThread = new Thread(new ThreadStart(unitInformationPanel1.PopulateUnitInformation));
infoThread.Start();
batteryInformationPanel1.InitializeBatteries();
magStripeReaderPanel1.SetupPointOfSale();
}
бы информация о нити прекращаются, когда блок Заселите информацию делаются? или было бы лучше перенести это создание потока в PopulateUnitInformation? вот как это выглядит.
public void PopulateUnitInformation()
{
unitModelLabel.Text = Properties.Settings.Default.UnitModelString;
serialNumberLabel.Text = Properties.Settings.Default.UnitSerialString;
biosVersionLabel.Text = UnitBios.GetBiosNumber();
osLabel.Text = OS.getOSString();
cpuLabel.Text = UnitCpu.GetCpuInfo();
var hdd = HddInfo.GetHddInfo();
diskNameLabel.Text = hdd.Name;
diskCapacityLabel.Text = hdd.Capacity;
diskFirmwareLabel.Text = hdd.Firmware;
memoryLabel.Text = MemoryInformation.GetTotalMemory();
NetworkPresenceInformation.GetAdapatersPresent();
biometricLabel.Text = BiometricInformation.IsPresent ? "Present" : "Not Present";
var networkAdaptersPresense = NetworkPresenceInformation.GetAdapatersPresent();
bluetoothLabel.Text = networkAdaptersPresense[0] ? "Present" : "Not Present";
wifiLabel.Text = networkAdaptersPresense[1] ? "Present" : "Not Present";
cellularLabel.Text = networkAdaptersPresense[2] ? "Present" : "Not Present";
}
-.
вау я просто побежал с infothread и все еще потребовалось некоторое время, чтобы загрузить (может быть 12 панелей я созданных в основном потоке, но он погрузил 12 кадров и блок информационная панель заселена ее информация после всего загружено. это было круто, но это безопасно? несколько легко сделать 12 потоков для моих панелей это? или это немой?
EDIT
это я что я сделал для секундомера.
Stopwatch programTimer;
public Form1()
{
programTimer = Stopwatch.StartNew();
InitializeComponent();
SetupDebugWindow();
TerminateKeymon();
UnitModel.SetModel();
UnitSerialNumber.SetSerialNumber();
}
private void Form1_Shown(object sender, EventArgs e)
{
audioBrightnessPanel1.UpdateBrightnessTrackbar();
applicationLauncherPanel1.LoadApplications();
programTimer.Stop();
Console.WriteLine("Load Time: {0}",programTimer.ElapsedMilliseconds);
timer1.Start();
}
Будет ли это быть точным?
EDIT 2 6/18/2012
Ну я взял совет использования BackgroundWorker. Пожалуйста, дайте мне знать, если я сделал это правильно.
private void Form1_Load(object sender, EventArgs e)
{
backgroundWorker1.RunWorkerAsync();
}
void BackgroundWorker1DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
{
unitInformationPanel1.PopulateUnitInformation();
batteryInformationPanel1.InitializeBatteries();
magStripeReaderPanel1.SetupPointOfSale();
}
также есть способ времени это? –
Вы говорите о батарее. Это для мобильного устройства (Win Phone, Android и т. Д.) Или для ПК/ноутбука? У ПК есть [BackgroundWorker] (http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx), что было бы здорово для этого. – jp2code
@ jp2code PC Tablet. –