Dim Cmd As New System.Data.OracleClient.OracleCommand
Dim ds1 As DataSet = New DataSet
Cmd.Connection = con
Cmd.CommandText = sql
adapter.Fill(ds1, "stat")
DataGridView1.DataSource = ds1.Tables("stat")
查询的内容比较复杂,速度慢,就像死机了一样。
怎样才能避免程序成为无响应状态呢?
要是循环语句经常会用到do events。但这种情况就不会解决了。
25 个解决方案
#1
多大的数据量,数据库做优化没有?索引什么的都建了没有
#2
数据量非常大啊,索引建了
oracle数据库,表结构大概如下:
站号,日期,气温,降水,日照。。。。
表里面存了2000多个站点在50年左右的逐日数据,也就是说每天每个站点都占一条记录。所以数据量很大啊。
索引是:站号和日期
请问还有什么方法可以优化的吗?
oracle数据库,表结构大概如下:
站号,日期,气温,降水,日照。。。。
表里面存了2000多个站点在50年左右的逐日数据,也就是说每天每个站点都占一条记录。所以数据量很大啊。
索引是:站号和日期
请问还有什么方法可以优化的吗?
#3
数据量 很大 ,还是用DataSet ,使用只读向前 数据要快多了
#4
而且没有必要 全部取出来数据吧,使用存储过程分页 效果要好多了
比如使用 SQL SERVER 的ROW_NUMBER(),
还有 历史记录 很明显 应该导出到 其他备份表~让表里面的 历史数据 导出吧
比如使用 SQL SERVER 的ROW_NUMBER(),
还有 历史记录 很明显 应该导出到 其他备份表~让表里面的 历史数据 导出吧
#5
我用的是oracle数据库,怎么使用dataset?
能给个简单的例子吗?
能给个简单的例子吗?
#6
可以创建一个线程
#7
怎么创建线程?能根据我的代码帮我写一下吗?
#8
帮顶
#9
#10
友情up
#11
帮顶!
#12
找个orancle的分页存储过程.....
#13
这么大数据量怎么可能不慢,
#14
帮顶
#15
先来个表分区,建索引,调用分页存储过程,详细也懒得写,百度吧兄弟
#16
用多线程吧:
Private Sub mnuSys_Menu_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles mnuSys_Menu.Click
Dim td As New System.Threading.Thread(AddressOf Query)
td.Start()
End Sub
Private Sub Query()
Dim Cmd As New System.Data.OracleClient.OracleCommand
Dim ds1 As DataSet = New DataSet
Cmd.Connection = con
Cmd.CommandText = sql
adapter.Fill(ds1, "stat")
DataGridView1.DataSource = ds1.Tables("stat")
……
End Sub
#17
如果要代入参数,则使用线程池:
但是注意线程池只能代入一个参数
但是注意线程池只能代入一个参数
Private Sub mnuSys_Menu_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles mnuSys_Menu.Click
System.Threading.ThreadPool.QueueUserWorkItem(New Threading.WaitCallback(AddressOf Query), I)
End Sub
Private Sub Query(ByVal objIndex As Object)
Dim Cmd As New System.Data.OracleClient.OracleCommand
Dim ds1 As DataSet = New DataSet
Cmd.Connection = con
Cmd.CommandText = sql
adapter.Fill(ds1, "stat")
DataGridView1.DataSource = ds1.Tables("stat")
……
End Sub
#18
不懂VB.NET,但是如果是Windows程序的话可以使用多线程,在线程中执行长时间的操作,可以解决这个问题的。一般windows程序中如果有长时间等待的操作都会放入线程中
#19
不用线程可以查出结果,用了线程什么结果都没有了?怎么回事?
#20
出了错误“线程间操作无效: 从不是创建控件“DataGridView1”的线程访问它。”
在线程里面还不能使用控件了吗?
在线程里面还不能使用控件了吗?
#21
想办法在数据库优化,代码对这么大的数据量没什么效果的(除非多线程用的好),分页+视图(每5年建一个)
#22
分页+视图(每5年建一个)
#23
你需要Control.CheckForIllegalCrossThreadCalls = False
#24
委托
#25
谢谢大家,最后我用分区的方法优化了一下,速度快了2倍。
#1
多大的数据量,数据库做优化没有?索引什么的都建了没有
#2
数据量非常大啊,索引建了
oracle数据库,表结构大概如下:
站号,日期,气温,降水,日照。。。。
表里面存了2000多个站点在50年左右的逐日数据,也就是说每天每个站点都占一条记录。所以数据量很大啊。
索引是:站号和日期
请问还有什么方法可以优化的吗?
oracle数据库,表结构大概如下:
站号,日期,气温,降水,日照。。。。
表里面存了2000多个站点在50年左右的逐日数据,也就是说每天每个站点都占一条记录。所以数据量很大啊。
索引是:站号和日期
请问还有什么方法可以优化的吗?
#3
数据量 很大 ,还是用DataSet ,使用只读向前 数据要快多了
#4
而且没有必要 全部取出来数据吧,使用存储过程分页 效果要好多了
比如使用 SQL SERVER 的ROW_NUMBER(),
还有 历史记录 很明显 应该导出到 其他备份表~让表里面的 历史数据 导出吧
比如使用 SQL SERVER 的ROW_NUMBER(),
还有 历史记录 很明显 应该导出到 其他备份表~让表里面的 历史数据 导出吧
#5
我用的是oracle数据库,怎么使用dataset?
能给个简单的例子吗?
能给个简单的例子吗?
#6
可以创建一个线程
#7
怎么创建线程?能根据我的代码帮我写一下吗?
#8
帮顶
#9
#10
友情up
#11
帮顶!
#12
找个orancle的分页存储过程.....
#13
这么大数据量怎么可能不慢,
#14
帮顶
#15
先来个表分区,建索引,调用分页存储过程,详细也懒得写,百度吧兄弟
#16
用多线程吧:
Private Sub mnuSys_Menu_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles mnuSys_Menu.Click
Dim td As New System.Threading.Thread(AddressOf Query)
td.Start()
End Sub
Private Sub Query()
Dim Cmd As New System.Data.OracleClient.OracleCommand
Dim ds1 As DataSet = New DataSet
Cmd.Connection = con
Cmd.CommandText = sql
adapter.Fill(ds1, "stat")
DataGridView1.DataSource = ds1.Tables("stat")
……
End Sub
#17
如果要代入参数,则使用线程池:
但是注意线程池只能代入一个参数
但是注意线程池只能代入一个参数
Private Sub mnuSys_Menu_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles mnuSys_Menu.Click
System.Threading.ThreadPool.QueueUserWorkItem(New Threading.WaitCallback(AddressOf Query), I)
End Sub
Private Sub Query(ByVal objIndex As Object)
Dim Cmd As New System.Data.OracleClient.OracleCommand
Dim ds1 As DataSet = New DataSet
Cmd.Connection = con
Cmd.CommandText = sql
adapter.Fill(ds1, "stat")
DataGridView1.DataSource = ds1.Tables("stat")
……
End Sub
#18
不懂VB.NET,但是如果是Windows程序的话可以使用多线程,在线程中执行长时间的操作,可以解决这个问题的。一般windows程序中如果有长时间等待的操作都会放入线程中
#19
不用线程可以查出结果,用了线程什么结果都没有了?怎么回事?
#20
出了错误“线程间操作无效: 从不是创建控件“DataGridView1”的线程访问它。”
在线程里面还不能使用控件了吗?
在线程里面还不能使用控件了吗?
#21
想办法在数据库优化,代码对这么大的数据量没什么效果的(除非多线程用的好),分页+视图(每5年建一个)
#22
分页+视图(每5年建一个)
#23
你需要Control.CheckForIllegalCrossThreadCalls = False
#24
委托
#25
谢谢大家,最后我用分区的方法优化了一下,速度快了2倍。