- 博客(13)
- 问答 (1)
- 收藏
- 关注
原创 解决控件键盘事件连续触发
问题描述:当光标聚焦在一个表单的提交按钮上,用户按回车,程序会访问服务器进行数据保存,此时会阻塞UI线程。如果此时用户继续拼命按回车,这些事件会堆积在那里,待服务器返回结果后,UI线程会接收到这些堆积的回车事件,继续触发提交操作解决思路:1:将保存方法改成异步,不再阻塞UI线程,并在用户按下回车后,将控件离焦。待方法执行完成,再将控件重新聚焦2:不使用异步,同样需要在用户按下回车后,将控件...
2019-09-05 17:35:19
1934
1
原创 泛型反射
场景:方法定义了一个泛型T,需要根据泛型的具体类型做特殊处理:当类型为Page< T >(一个泛型类)时,要拿到Page里面的T的具体类型,然后对应到另一个泛型类List< T >,最后调用另一个泛型方法JsonConvertUtil.DeserializeObject< T >(string jsonStr, JsonSerializerSettings se...
2018-07-25 09:03:40
2238
原创 大列表序列化
场景:几万行的数据从后端传输到前端,后端先序列化成字符串,传输到前端再反序列化,在序列化和反序列化时报内存溢出异常原因:序列化使用的类库不支持过长的字符串,对长字符串的很多常规操作都会导致内存溢出解决方案:在后端将大列表拆分成多个小列表,分别序列化,再将这些小字符串拼接成大字符串,传输到前端后,前端先根据后端约定的分隔符将大字符串拆分成多个小字符串,分别反序列化,再加到一个列表中注意事...
2018-07-24 09:47:47
323
原创 项目中死锁问题的处理策略
项目初期上线,经常会出现查询超过10分钟、程序无响应、操作报错死锁牺牲品错误,这些都与死锁有关原因分析1、查询超过10分钟 大量的报表查询,平均查询时间超过3秒以上,并且关联了很多张表,其中包括关键业务表和百万、千万级的表,而查询与更新同时发生,便会有几率发生死锁(原理请参考这篇文章),查询的时间越长、更新操作越频繁,几率越大2、上了消息推送功能,频繁出现大面积用户程序无响应,白...
2018-03-27 10:52:47
1089
原创 乐观锁实现
示意图,本项目我们用ModifiedOn做为版本标识 编码步骤 1、WPF读取数据时,必须读ModifiedOn——+默认都是读的+ 2、WPF端需在调用UPDATE、DELETE(编辑、删除、审核)类方法时,要同时传ModifiedOn给API 3、API处理调用之前,先验证ModifiedOn是否大于DB版本,为否则中止处理 4、API处理调用后,更新DB(默认是更新的),同时将...
2018-03-07 17:26:32
294
原创 相同的sql在api端查询慢,但在数据库软件上正常跑
原因1: api端配置默认将字符以Unicode格式传输,而数据库字段的存储格式是单字节,这样就会导致索引失效 解决方案: 修改设置,例如在jfinal中这样设置: jdbcUrl = jdbc:sqlserver://xxx;DatabaseName=xxx;sendStringParametersAsUnicode=false 原因2: JDBC是以参数形式执行的sql,和...
2018-03-07 17:17:16
996
1
原创 WPF绑定不到父控件属性
原因: 如果A控件并不是属于visual tree的部分,那么他不能连接到他父控件的datacontext,也就不能绑定到父控件的属性解决方案: 使用一个Freezable做代理 public class BindingProxy : Freezable { #region Overrides of Freezable protect...
2018-03-07 17:03:32
1197
原创 select死锁问题
场景: 2个事务分别对2条数据加了S锁,然后都要更新对方的数据 1个事务做UPDATE操作,同时并发了一个非事务慢查询 场景1出现频率低,简单调整程序或业务规则可避免,在此不研究 场景2出现频率高,特别是存在大量慢查询的情况,以下给出原理及适用于SL的解决方案原因分析: 当select列没有被索引完全覆盖时,先对非聚集索引加S锁,然后需要通过聚集索引找到其他列,这时要申请聚集...
2018-03-07 16:47:09
1207
原创 消息推送实现
客户端与服务端主要是HTTP通信,现要添加消息推送功能,方案选择主要有3种:客户端轮询,服务器推,WebSocket,Socket轮询实现简单,但资源消耗过大,不适用于当前项目服务器推更适用于传统WEB由于我们的开发环境和发布环境对WebSocket支持不一致,故优先采用Socket实现第一版基本实现为服务端与客户端再建立一层TCP连接,常规请求走HTTP协议,推送行
2018-01-05 16:31:20
492
原创 java获取本机IP (兼容linux)
程序在本地没问题,发布到linux上报错,百度了一下是ip获取方法InetAddress.getLocalHost().getHostAddress()不兼容linux,网上提供一种解决方案是修改linux服务器配置,我试了一下,没用,于是采用另一种方案,如下: private static String getLinuxLocalIp() throws SocketException
2018-01-05 15:12:11
728
原创 Log4j动态配置
常规实现:Log4j默认配置会去读log4j.properties文件 每个类都会提前实例化一个logger变量,实例化时便使用了默认的配置动态配置实现:可先调用PropertyConfigurator.configure(path)动态控制配置文件private static void init(String[] args) { String confi
2018-01-05 15:02:57
1009
原创 智能搜索下拉文本框
智能搜索下拉文本框 此控件在开源控件intellibox基础上,添加了一些功能 原有功能,以及相关使用说明请参照http://intellibox.codeplex.com/documentation Basic Features - Supports MVVM for results. - Supports Watermark. - Asynchronously
2015-11-11 11:05:04
374
原创 动态数据源的绑定
动态数据源的绑定 提供一种思路,可以简易地对动态数据做页面展示与绑定 以XML的形式构建控件,便于直观地控制结构 方便UI加装 便于对动态数据做表单验证 场景1:页面上的控件个数或是属性不固定,需要由数据库中的数据去决定基本步骤: - 1. 构建XML文本 - 2. 使用XmlTextReader生成控件 - 3. 将控件放入页面window.csStackPane
2015-11-11 09:57:36
621
空空如也
基于安卓的拍摄特效实现,类似于百度魔拍
2014-04-24
TA创建的收藏夹 TA关注的收藏夹
TA关注的人