我在窗体中画线 然后把线经过的点用arrayList数组暂时保存然后经过简单筛选后把需要的点保存在数据库里
开始很顺利 但是到数据库里保存了大概400多条数据的时候 鼠标画线就开始不平滑了 开始出现大折线 鼠标就画不出很圆润的感觉了
是怎么回事呢?

解决方案 »

  1.   

    估计是有效数字问题吧
    http://community.csdn.net/Expert/topic/5079/5079774.xml?temp=.5316584
      

  2.   

    也就是说 开始在mousemove事件下用
    g.DrawLine(new Pen(Color.Red), oldX, oldY, e.X, e.Y);
    oldX = e.X;
    oldY = e.Y;
    p = new Point(e.X,e.Y);
    arrayList.Add(p);
    来画线鼠标经过的点都保存在arrayList里面 然后保存到数据库 但是后来随着保存到数据库的数据的增多 鼠标并不能画出很顺化的曲线了 全是折线(不是小锯齿)保存到 也就是说arrayList里面的数据变化很大 
    大家帮忙解决下啊
      

  3.   

    这应该是响应mousemove事件的问题,你这样响应的话,画规画,存进arraylist的规存进arraylist的,这个mouseover事件的响应不可能那么灵敏,两个响应间肯定有间隔,所以就造成了,你从arraylist里取数据再画时的出现拆线现象
      

  4.   

    我把存到数据库的程序去掉 只保留画线程序 不管画多少 都不会出现大折线的问题 这样的话 应该就不是mousemove事件的问题吧
    怎么回事呢
      

  5.   

    增加到2G内存,双核处理器,NVIDIA GeForce 8800GTX 显卡试试
      

  6.   

    private void MsUp(object sender, System.Windows.Forms.MouseEventArgs e)
    { double d0;
    double d1;
    double d;
    Drag = false; if(e.Button == MouseButtons.Left)
    isMoving = false; string str="server=127.0.0.1;Integrated Security=SSPI;database=webdevelop";
    SqlConnection conn=new SqlConnection(str);
    for(int i=0;i<array.Count/2;i++)
    {
    p0=(Point)array[i*2];
    array1.Add(p0);

    }
    array.Clear();


    for(int j=1;j<array1.Count-1;j++)
    {
    p1=(Point)array1[j-1];
    p2=(Point)array1[j];
    p3=(Point)array1[j+1]; 
    d0=System.Math.Sqrt((p3.Y-p1.Y)*(p3.Y-p1.Y)+(p1.X-p3.X)*(p1.X-p3.X));
    d1=((p3.Y-p1.Y)*p2.X+(p1.X-p3.X)*p2.Y+p1.Y*p3.X-p3.Y*p1.X);
    d=d1/d0;
    if(d>1||d<-1)
    {
    }
    else
    {
    array1.Remove(p2); 
    j--;
    }
    }
    for(int k=0;k<array1.Count;k++)
    {
    p4=(Point)array1[k];
    string sql="INSERT INTO ZUOBIAO (XX,YY) VALUES ("+p4.X+","+p4.Y+")";
    SqlDataAdapter adapter=new SqlDataAdapter(sql,conn);
    DataSet dataset=new DataSet();
    adapter.Fill(dataset,"ZUOBIAO");
    }
    array1.Clear();



         }
    这是我的保存程序 帮我看看吧