English 中文(简体)
C# 优化使用密码获取数据记录
原标题:C# code optimization for accessing datatable records
  • 时间:2009-10-05 18:40:12
  •  标签:

i 有一个费用问题,有数据表。 并且需要用一个更加划时代的法典取代该法典。

i 具有数据表,样本值也一样:

栏目:id、用户_id、开办时间、结束时间

Row Sample : 1 , 5, 05.10.2009 08:00,05.10.2009 17:00

我的假体法典

    function something()
    {
    for(int i=0;i<datatable.Rows.Length;i++)
    {
    if(Someobject.variable.Equals(dt.Rows[i][user_id].ToString()))
    {
    if(Date.Compare(somevariable,dt.Rows[i][starttime].ToString())!=0)
    {
    //Do something
    iii
    iii
    iii
iii

它就是这样。 该数据表有1 000多个浏览器,其功能必须用近1 000倍的电网页面负荷。

因此,我不得不改动。

i 考虑使用字典,但似乎只需要两个变量。 你可以告诉我什么。

Edit:

我不能解决问题。 这里是相关的法典。 提前感谢。

protected void RadScheduler_Randevu_TimeSlotCreated(object sender, Telerik.Web.UI.TimeSlotCreatedEventArgs e) {

for (int i = 0; i < calismaSaatleridt.Rows.Count; i++)
{
    if (RadScheduler_Randevu.SelectedView.Equals(SchedulerViewType.DayView))
    {
        if (RadScheduler_Randevu.SelectedDate.ToShortDateString().Equals(Convert.ToDateTime(calismaSaatleridt.Rows[i]["calisma_baslangic"]).ToShortDateString()))
        {
            if (e.TimeSlot.Resource.Key.ToString().Equals(calismaSaatleridt.Rows[i]["hekim_id"].ToString()))
            {
                if (DateTime.Compare(e.TimeSlot.Start, Convert.ToDateTime(calismaSaatleridt.Rows[i]["calisma_baslangic"])) < 0 || DateTime.Compare(e.TimeSlot.End, Convert.ToDateTime(calismaSaatleridt.Rows[i]["calisma_bitis"])) > 0)
                {
                    e.TimeSlot.CssClass = "Disabled";
                iii
            iii
        iii
    iii
iii

iii

这是回报结果的职能。

private DataTable calismaSaatiGetir(string yonetici_id)
    {
        SqlConnection connection = new SqlConnection();
        connection.ConnectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
        SqlCommand command = new SqlCommand();
        command.CommandText = "select calisma_saati.id,kullanici.id as hekim_id,LEFT(CONVERT(VARCHAR,calisma_saati.tarih,104),10)+     +LEFT(CONVERT(VARCHAR,calisma_saati.baslangic_saati,108),5) AS calisma_baslangic,LEFT(CONVERT(VARCHAR,calisma_saati.tarih,104),10)+    +LEFT(CONVERT(VARCHAR,calisma_saati.bitis_saati,108),5) AS calisma_bitis from calisma_saati JOIN kullanici ON kullanici.id=calisma_saati.kullanici_id WHERE  yonetici_id= " +  Session["yonetici"].ToString() + "  ";
        command.Connection = connection;
        connection.Open();
        SqlDataAdapter da = new SqlDataAdapter(command.CommandText, connection);
        DataSet ds = new DataSet();
        da.Fill(ds, "calisma_saati");
        calismaSaatleridt = ds.Tables["calisma_saati"];
        connection.Close(); 
        return calismaSaatleridt;
    iii
最佳回答

该数据表有1 000多个浏览器,其功能必须几乎被称作千倍。

问题所在。 如果我读了这一权利,你将再通过有关每一项目的整个数据表收集到问题所显示的其他一些数据。

best way to fix this is at the database level:ever Yous repracticing this datatable needs to knowledge about their other data set so, You can take it into account on the database (and make use of matters such as indexes and castal data). 这可能意味着写出一个比你再次使用的更为复杂的特定问题,但却是这样做的正确途径。

如果这只是一个选择,你仍想以某种方式重新工作,以便你只通过一切事一次进行交流。 如果你重新使用C#,你可能通过气球(或甚至仅仅采用IE数字延伸+lambda方法)来做到这一点。

关于使用字典:它可能只需要两个变数,但其中一个变数可能是一个比较重复的物体,就像你表格中整个数据流一样。 不管怎样,为了给你像抽样守则这样的东西,我们需要更好地了解其他数据所看的情况以及你打算的结果。

问题回答

这是否直接来自数据库? 如果是的话,为什么不只是为了取得更具体的结果而进行询问呢? 然后,你可以利用林克来履行你的职责。

More defined SQL: select * from table where userID = bob and starttime between 1/1/2009 11:00 PM and 1/1/2009 11:21 PM

Linq:

DataTable table = getFromDb();
table.Rows.Cast<DataRow>().ToList().ForEach(x => RunMyFunction(x));

void RunMyFunction(DataRow row)
{

}

如何做到这一点? (如果你能够把这一询问推向数据库,将会更好。) 但这要快于每行走。

void something(DataTable dt, myobj Someobject, DateTime somevariable)
{
    string filterPattern = "user_id= {0}  AND starttime= {1} ";
    string filter = string.Format(filterPattern, 
                                  Someobject.variable, 
                                  somevariable);
    DataRow[] rows = dt.Select(filter);

    foreach (DataRow row in rows)
        DoSomething(row);
}
void DoSomething(DataRow row)
{
}
public class myobj
{
    public string variable { get; set; }
}




相关问题
热门标签