如何解决wpf中绘图的卡顿

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何解决wpf中绘图的卡顿相关的知识,希望对你有一定的参考价值。

参考技术A 让电脑变卡的原因有很多:
1、电脑内存不够,一直不清理电脑的缓存,就会让垃圾文件越来越多,这样就会导致电脑很卡,解决的办法很简单,用腾讯电脑管家火箭进行清理下。
2、网络太慢,如果宽带太小了,就会很慢很卡。升级宽带就好了。
3、电脑中病毒了。电脑一旦中毒了之后就会影响系统的运行速度,让电脑变很卡,所以不定时要用电脑管家对电脑进行杀毒。
4、软件不兼容,卸载掉不兼容的软件。本回答被提问者采纳

解决AutoComplete数据过多时的卡顿问题

  • 如下代码,data数据超过2千条时,每次输入字符过滤时非常卡
<AutoComplete
  dataSource={data}
  onChange={this.handleChange }
  allowClear={true}
  filterOption={
    (inputValue, option) => option.props.children.toUpperCase().indexOf(inputValue.toUpperCase()) !== -1
  }
/>

其原因: 每次输入变化,data就要从2000多条数据中过滤出目标元素,一过滤就导致AutoComplete下拉列表得变化,浏览器得重新绘制下拉列表的Dom,导致浏览器卡

解决办法一

采用防抖函数,在间隔时间内,连续输入字符串只在最后一个字符串发生时才触发事件(onChange默认输入内容已改变就触发事件)

  • 防抖函数
let timer;
export const debounce = (func, wait ) => {
  // let timer = 0;
  return function(...args) {
    if (timer) clearTimeout(timer);

    timer = setTimeout(() => {
      func.apply(this, args);
    }, wait);
  };
};
  • 使用AutoComplete使用防抖函数
<AutoComplete
  dataSource={data}
  onChange={debounce(this.handleChange) }
/>

办法一可以减少事件的触发,但是仍然无法避免一个问题,就是首次点击输入框的时候特别卡,因为这个时候2000多条数据要一次被渲染
然而,没有人会无聊到从2000多条数据滚动鼠标去查找自己的目标元素,都会通过输入关键字符去过滤查找
所以首次没必要加载这么多数据,可以默认截取原数据的前50条来显示即可
后面在输入框输入关键词后,将过滤好后的数据在赋给dataSource减少不必要的Dom渲染

解决办法二,防抖和过滤二合一解决

  static getDerivedStateFromProps (props, state) {
    return{
      originDataLists: props.originDataLists,
      currentDataLists: state.currentDataLists.length>0 ?state.currentDataLists : props.currentDataLists.slice(1,100)
    }
  }
onChange = (value) => {
  const {originDataLists} = this.state
  const currentDataLists = originDataLists.filter(item = item.toUpperCase().includes(value.toUpperCase()))
  this.setState({currentDataLists});
};

render(){
  const {currentDataLists} = this.state
  return(
    <AutoComplete
      dataSource={currentDataLists}
      onChange={debounce(this.handleChange) }
    />
  )
}

以上是关于如何解决wpf中绘图的卡顿的主要内容,如果未能解决你的问题,请参考以下文章

如何解决 IDEA 占用大量 CPU 导致的卡顿问题?这顿操作猛如虎

一个RecyclerView的卡顿问题的解决

解决ScrollView滑动RecyclerView的卡顿

解决AutoComplete数据过多时的卡顿问题

解决Eclipse编辑HTML,JSP,JS等时的卡顿问题,非常有效!!!

解决Eclipse编辑HTML,JSP,JS等时的卡顿问题,非常有效!!!