Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C内存管理和性能_C#_Sql_Winforms_C# 4.0 - Fatal编程技术网

C# C内存管理和性能

C# C内存管理和性能,c#,sql,winforms,c#-4.0,C#,Sql,Winforms,C# 4.0,标准很简单。我正在使用C4.0开发一个winform应用程序,并且有一个winform具有网格视图。在load事件中,我从数据库中检索数据,然后将数据源分配给gridview。我使用BackGroundWorker对象进行数据库检索。这很好。我的GUI是响应的。这些记录超过了10个拉丁美洲国家。因此,我使用后台工作程序填充数据表,然后将数据表分配给gridview。问题是,我的系统变慢了。当我最小化我的应用程序的mdi表单,并尝试打开internet浏览器等其他操作时,我的电脑会变慢。我有带2G

标准很简单。我正在使用C4.0开发一个winform应用程序,并且有一个winform具有网格视图。在load事件中,我从数据库中检索数据,然后将数据源分配给gridview。我使用BackGroundWorker对象进行数据库检索。这很好。我的GUI是响应的。这些记录超过了10个拉丁美洲国家。因此,我使用后台工作程序填充数据表,然后将数据表分配给gridview。问题是,我的系统变慢了。当我最小化我的应用程序的mdi表单,并尝试打开internet浏览器等其他操作时,我的电脑会变慢。我有带2GB内存的核心i32。有10条lac记录的网格使我的系统速度变慢。在这种情况下如何管理内存?代码如下:

背景工人; 数据表dt

    public Form1()
    {
        InitializeComponent();
        bWorker = new BackgroundWorker();
        bWorker.DoWork += new DoWorkEventHandler(m_oWorker_DoWork);
        bWorker.ProgressChanged += new ProgressChangedEventHandler(m_oWorker_ProgressChanged);
        bWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(m_oWorker_RunWorkerCompleted);
        bWorker.WorkerReportsProgress = true;
        bWorker.WorkerSupportsCancellation = true;
    }

    void m_oWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {
        dataGridView1.DataSource = dt;
        pictureBox1.Visible = false;
        //progressBar1.Style = ProgressBarStyle.Blocks;
        //label1.Text  = "Data Loaded Successfully!";
        this.Hide();
        this.Show();
    }

    void m_oWorker_DoWork(object sender, DoWorkEventArgs e)
    {
        dt = getDataTable();
        //bWorker.ReportProgress(100);
    }
    void m_oWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
    {
        //Here you play with the main UI thread
        //progressBar1.Value = e.ProgressPercentage;
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        bWorker.RunWorkerAsync();

    }
    private DataTable getDataTable()
    {
        string conStr = ConString;
        SqlConnection con = new SqlConnection(conStr);
        SqlCommand cmd = new SqlCommand("Select *from testtable",con);
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        dt = new DataTable();
        try
        {
            da.Fill(dt);
            return dt;
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
            return null;
        }
    }
请指导我如何管理内存,使系统不会变慢。若我在将datatable分配给网格后处理它,那个会有帮助吗


我实际上是个初学者。并希望获得有关内存管理的完整指导。应用程序应该是快速的。Thanx

您不能期望将一百万行数据加载到GUI控件中,并期望一切正常,对吗

问题在于:

SqlCommand cmd = new SqlCommand("Select *from testtable",con);

您不可能选择整个表。您需要将查询限制为GUI可以合理显示的行。完全在黑暗中拍摄,我想说的是最多一千行左右。

您不能期望将一百万行数据加载到GUI控件中,并期望一切正常,是吗

问题在于:

SqlCommand cmd = new SqlCommand("Select *from testtable",con);

您不可能选择整个表。您需要将查询限制为GUI可以合理显示的行。完全在黑暗中拍摄,我会说最多有1000行。

我的假设是您尝试在getDataTable中一次加载所有这些RoWord。为什么不按需加载?即,仅加载第一级负载。如果所有这些都是第一级的,那么您可以分成多个页面,其大小可能是屏幕宽度。

我的假设是您尝试在getDataTable中一次性加载所有这些ROCORD。为什么不按需加载?即,仅加载第一级负载。如果所有这些都是第一级的,那么您可以分成多个页面,其大小可能是屏幕宽度。

最可能的问题是DataGridView为结果集中的每一行创建一行。您应该了解是什么、和。

您的问题很可能是DataGridView为结果集中的每一行创建了一行。您应该了解是什么,和。

您可以使用DataGrid控件设置所有适当的select、insert、update、delete语句,添加分页规则,这也会增加技巧。网格不会一次加载所有记录,而是使用巧妙的内部功能从数据库中选择并仅显示适当的数据。
希望这也能有所帮助。

您可以使用DataGrid控件,设置所有适当的select、insert、update、delete语句,添加分页规则,这也会增加技巧。网格不会一次加载所有记录,而是使用巧妙的内部功能从数据库中选择并仅显示适当的数据。
希望这也能有所帮助。

10条lac记录意味着什么?100万行数据库表请粘贴GetDataTable的代码确定帖子已更新,GetDataTable方法是否有一个网格有10条lac记录。。。无论如何,用户都将无法使用。实现某种形式的过滤和/或分页。10条lac记录意味着什么?100万行数据库表请粘贴GetDataTable的代码确定帖子已更新,GetDataTable方法是否有一个网格有10条lac记录。。。无论如何,用户都将无法使用。实现某种形式的过滤和/或分页。但如果用户想从整个数据中过滤一些数据,该怎么办?他只能从一千行中筛选,而不能从一百万条记录中筛选。@user2109843 filter?嗯,这就是SQL的用途!你们听说过哪里吗?但若用户想从整个数据中过滤一些数据呢?他只能从一千行中筛选,而不能从一百万条记录中筛选。@user2109843 filter?嗯,这就是SQL的用途!你听说过哪里吗?