从数据库取出所有数据再进行相似度比较,数据有几万条

早起晚睡 2016-01-15 11:00:43
功能能实现是不是数据量太大反应速度 会不行啊 我只测试了1000条的数据
        private void button1_Click(object sender, EventArgs e)
{
//string[] str = { "111111111111", "22222222222222223", "33333333333333", "444444444444", "55555555555", "6666666666" };
//Random ro = new Random();
//textBox1.Text = str[ro.Next(str.Length)];
SqlConnection conn = new SqlConnection("SERVER=192.168.24.30;DATABASE=pc;PWD=werrew;UID=sa;");
string[] filesx = System.IO.Directory.GetFiles(Environment.CurrentDirectory, "*.xls");
string ss="";
string mm="";
if(filesx.Length>0)
{
button1.Enabled = false;
ExcelEdit ee=new ExcelEdit();
double nn;
ee.Open(filesx[0]);
SqlCommand cmd = new SqlCommand("select [内容摘要] from anli", conn);
cmd.Connection.Open();
SqlDataReader sdr = cmd.ExecuteReader();
Excel.Worksheet sheetSource = ee.GetSheet("Sheet1");
int sheetRowCount = sheetSource.UsedRange.Rows.Count;
int kk=1;
for (int i = 2; i <= sheetRowCount;i++ )
{
ss = ((Excel.Range)sheetSource.Cells[i, 5]).Text.ToString().Replace(Environment.NewLine, "").Replace("\n", string.Empty).Replace("\r", string.Empty);
while (sdr.Read())
{
mm = sdr[0].ToString().Replace(Environment.NewLine, "").Replace("\n", string.Empty).Replace("\r", string.Empty);
nn=getSimilarity(ss,mm);
if(nn>0.5)
{
listBox1.Items.Add(kk.ToString()+" "+mm);
kk = kk + 1;
break;
}
Application.DoEvents();
}

//getSimilarity
}
cmd.Connection.Close();
ee.Close();
button1.Enabled = true;
}
}

大家来讨论下
...全文
581 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
threenewbee 2016-01-17
  • 打赏
  • 举报
回复
http://blog.jobbole.com/47748/
秋的红果实 2016-01-17
  • 打赏
  • 举报
回复
写入excel可以不用Excel类,把excel表当作数据库,数据库--->数据库,要快些 写完数据,再用Excel类,一次性替换replace。\n,\r
早起晚睡 2016-01-17
  • 打赏
  • 举报
回复
引用 9 楼 caozhy 的回复:
http://blog.jobbole.com/47748/
谢谢
Ping myPing;
                                    myPing = new Ping();
                                    //using (Ping myPing = new Ping())
                                    //{
                                        myPing.PingCompleted += new PingCompletedEventHandler(myPing_PingCompleted);
 
                                        string pingIP = "192.168." + j.ToString() + "." + i.ToString();
                                        myPing.SendAsync(pingIP, 1000, null);
                                    //}
这个问题 怎么回事我在win7上用using没问题 怎么我到server 2008的系统上就报错误啊
早起晚睡 2016-01-16
  • 打赏
  • 举报
回复
报这个错误 System.NullReferenceException: 未将对象引用设置到对象的实例。 在 PcIpAddress.Form1.myPing_PingCompleted(Object sender, PingCompletedEventArgs e)
早起晚睡 2016-01-16
  • 打赏
  • 举报
回复
                                    Ping myPing;
                                    myPing = new Ping();
                                    //using (Ping myPing = new Ping())
                                    //{
                                        myPing.PingCompleted += new PingCompletedEventHandler(myPing_PingCompleted);

                                        string pingIP = "192.168." + j.ToString() + "." + i.ToString();
                                        myPing.SendAsync(pingIP, 1000, null);
                                    //}
这段代码 只要加上using我开发环境的电脑没问题 换到别的电脑上就不行直接就死了
xuzuning 2016-01-15
  • 打赏
  • 举报
回复
while (sdr.Read()) 只会执行一轮(i = 2 时) while 中只检查出了第一个满足条件的记录 Application.DoEvents(); 应放到 if 中(listBox1 未更新,不需要交出控制权) getSimilarity 被执行 M * N 次,应尽可能的优化 Excel 表是可以用 SQL 指令访问的 所以你可以用 Linq 做关联查询,关联条件是 getSimilarity()>0.5
  • 打赏
  • 举报
回复
什么跨进程多层连接的ExcelEdit,什么“一大堆 string.Replace”,什么 for 里边嵌套while(而且这里有逻辑错误,丢失了许多数据),还有一个计算过程中非要纠结着 UI 线程的 ListBox 操作。 最好先研究一个比较理论化的程序系统,它真正对内存中的特定数据结构进行分析,抛开这些临时东拼西凑的东西。等有了一点点核心技术,你再去纠结那么多无用的——跟其它的东西连接的概念。这样分层设计,才比较靠谱。
  • 打赏
  • 举报
回复
你从算法上就能看出,这至少是指数级的时间复杂度。根据的所谓“相似度”具体机制的不同,可能更高复杂度。 这种东西,本来如果你没有大规模集群系统开发经验,那么就应该当作小孩子的玩意儿玩儿,不能当真去用真实数据。
xdashewan 2016-01-15
  • 打赏
  • 举报
回复
先把你的Application.DoEvents();去掉,改成线程再说
  • 打赏
  • 举报
回复
你先确认你的时间消耗点在哪里,目测就是在getSimilarity里面
早起晚睡 2016-01-15
  • 打赏
  • 举报
回复
引用 4 楼 sp1234 的回复:
什么跨进程多层连接的ExcelEdit,什么“一大堆 string.Replace”,什么 for 里边嵌套while(而且这里有逻辑错误,丢失了许多数据),还有一个计算过程中非要纠结着 UI 线程的 ListBox 操作。 最好先研究一个比较理论化的程序系统,它真正对内存中的特定数据结构进行分析,抛开这些临时东拼西凑的东西。等有了一点点核心技术,你再去纠结那么多无用的——跟其它的东西连接的概念。这样分层设计,才比较靠谱。
谢谢大家指导 学习下 能力有限多多指教!!!!!!!
程序 = 数据结构 + 算法  程序是为了解决实际问题而存在的。然而为了解决问题,必定会使用到某些数据结构以及设计一个解决这种数据结构的算法。如果说各种编程语言是程序员的招式,那么数据结构和算法就相当于程序员的内功。编程实战算法,不是念PPT,我们讲的就是实战与代码实现与企业应用。程序 = 数据结构 + 算法                ——图灵奖得主,计算机科学家N.Wirth(沃斯)作为程序员,我们做机器学习也好,做python开发也好,java开发也好。有一种对所有程序员无一例外的刚需 —— 算法与数据结构日常增删改查 + 粘贴复制 + 搜索引擎可以实现很多东西。同样,这样也是没有任何竞争力的。我们只可以粘贴复制相似度极高的功能,稍复杂的逻辑没有任何办法。语言有很多,开发框架更是日新月异3个月不学就落后我们可以学习很多语言,很多框架,但招聘不会考你用5种语言10种框架实现同一个功能。真正让程序员有区分度,企业招聘万年不变的重点 —— 算法与数据结构。算法代表程序员水平的珠穆朗玛。 本视频由微软全球最有价值专家尹成录制,拒绝念PPT,代码实战数据结构与算法导论。除了传统数据结构算法,加入高并发线程安全数据结构,分布式负载均衡算法,分布式哈希表,分布式排序等等现代算法。  算法,晦涩难懂,却又是IT领域受重视的素养之一。可以说,算法能力往往决定了一个程序员能够走多远。因此,BAT/FLAG等国内外各大名企非常喜欢在面试环节考核求职者的算法编程,这也成为了无数准程序员们过不去的一道“坎”。如何入门并成为一名出色的算法工程师?但无论半路出家还是科班出身,除学生时代搞算法竞赛的同学外真正用心学习过算法与数据结构太少太少。对于后期想要学习算法与数据结构却不得不面对以下问题:没有自己的知识框架,无法关联知识点,学习效率低有疑问而无人解答,有问题无法理解全靠猜测,一个问题卡好几天市面上资料题解质量参差不齐,正确性未可知Google算法-工程师尹成大哥学习算法。

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧