как оптимизировать производительность приложения wpf - PullRequest
0 голосов
/ 29 июня 2010

я делаю wpf-приложение хорошо работающим. Но всякий раз, когда размер моего xml становится большим, он работает очень медленно, каждый раз, когда мы получаем данные из xml, как показано ниже Любое тело предлагает мне это из-за этого или может быть другая проблема

как я могу изменить это Спасибо shashank`

              DataSet xmlData = new DataSet();
            XmlTextReader reader = null;
            try
            {
                if (File.Exists(CommonUtils.xmlPath))
                {
                    //convert XmlDocument to XmlTextReader
                    reader = new XmlTextReader(new StringReader(CommonUtils.DecryptXML().OuterXml));
//get the xml data
                    xmlData.ReadXml(reader);
                    reader.Close();

                    //get category rows from 
                    DataRow[] eventRows = xmlData.Tables["M_EVENT"].Select(" ROW_STATUS=1");
                    if (eventRows.Length > 0)
                    {

                        //create a datatable for event 
                        DataTable dtEvent = xmlData.Tables["M_EVENT"].Clone();


                        //add a default row to the event table
                        DataRow dr = dtEvent.NewRow();
                        dr[0] = "-1";
                        dr[1] = "--Select Event--";
                        dr[2] = "1";
                        dtEvent.Rows.InsertAt(dr, 0);
                        foreach (DataRow row in eventRows)
                        {
                            DataRow drEvent = dtEvent.NewRow();
                            drEvent["PK_EVENT_ID"] = row["PK_EVENT_ID"];
                            drEvent["EVENT_NAME"] = row["EVENT_NAME"];
                            drEvent["EVENT_TYPE"] = row["EVENT_TYPE"];
                            dtEvent.Rows.Add(drEvent);
                        }

                        //bind the category drop down
                        cmbEvent.DataContext = dtEvent.DefaultView;
                        cmbEvent.SelectedValuePath = "PK_EVENT_ID";
                        cmbEvent.DisplayMemberPath = "EVENT_NAME";

                        cmbEvent.SelectedIndex = 0;


                    }
                }
                else
                {

                    Lblgetevent.Visibility = Visibility.Visible;

                }

            }`   

1 Ответ

1 голос
/ 30 июня 2010

Ой!

Для чего вы используете DataTable ?!Это ужасно неэффективно для этой цели и требует от вас написания большого количества дополнительного кода.Кроме того, почему вы устанавливаете свойства ComboBox из кода, а не из XAML?

Гораздо более простой способ - привязать ваш ComboBox непосредственно к XML:метод DataTable, но для добавления строки «Выбрать событие» потребуется добавить CompositeCollection.Это можно сделать, но ...

Лучшее решение - использовать LINQ to XML:

public object Events
{
  get
  {
    return new[] { new { Name = "--Select Event--", Id = -1 }}.Concat(
      from element in EventsXml.Elements("M_EVENT")
      where element.Element("ROW_STATUS").Value=="1"
      select new
      {
        Name = element.Element("EVENT_NAME").Value,
        Id = int.Parse(element.Element("PK_EVENT_ID").Value),
      });
  }
}

С этим простым XAML:

<ComboBox ItemsSource="{Binding Events}" SelectedValuePath="Id" ...>
  <ComboBox.ItemTemplate>
    <DataTemplate>
      <TextBlock Text="{Binding Name}" />
    </DataTemplate>
  </ComboBox.ItemTemplate>
</ComboBox>

LINQРешение для XML быстрее, чем привязка к XML, что, в свою очередь, быстрее, чем использование DataTable.Кроме того, решение LINQ to XML намного чище, чем два других.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...