随笔分类 - 可遇不可求的Question系列
描述在开发过程中可遇不可求的Question,希望对大家有所帮助。
可遇不可求的Question之C#中的匿名事件导致内存泄露的解决篇
摘要:题设: 在C#中,匿名函数是一个很好用的语法,大大简化了语法编写复杂度,然而,在实际应用中,如果频繁使用了匿名函数,匿名事件,会导致严重的资源泄露,甚至于内存崩溃.但是,由于匿名函数本身不存在引用的对象.因此,导致将其取消订阅或取消引用非常困难. 分析: 如果使用匿名函数订阅事件,事件的取消订阅过程将比较麻烦。这种情况下若要取消订阅,必须返回到该事件的订阅代码,将该匿名方法存储在委托变量中,然后将此委托添加到该事件中。一般来说,如果必须在后面的代码中取消订阅某个事件,则建议您不要使用匿名函数订阅此事件。 要防止在引发事件时调用事件处理程序,请取消订阅该事件。要防止资源泄露,应在释放订户对象之前
阅读全文
可遇不可求的Question之Protoc.exe无法编译proto文件篇
摘要:题设:报错 MyRequest.proto:1:1: Expected top-level statement (e.g. "message").分析:实际上是由于在简体操作系统下,默认的proto文件,其实就是文本文件,的"被读取编码"是GB2312,如果proto文件不是使用该编码编写的,而是utf-8等其他格式,文件头会有乱码,即在message前会有1位乱码,导致protoc程序无法识别到messge开头的标识,导致了异常,解决:修改GB2312编码保存后既可以继续编译成功.~~
阅读全文
可遇不可求的Question之重置SQLSERVER表的自增列标识值(Seed)篇
摘要:1.truncate table tablename 当然前提是你必须要有这么高的权限.2.也必须要有极高的权限,"调用方必须是表所有者"--每次要删除表中的数据(delete from tableName),下次使用时,表中的自增ID就会从上次的ID依次递增。--只要在delete执行结束后,执行 dbcc checkident('tableName',reseed,0) 自增列即会从"1"开始。附:@@IDENTITY,SCOPE_IDENTITY,IDENT_CURRENT的区别@@IDENTITY--是得到当前会话的所有范围的最后
阅读全文
可遇不可求的Question之Regex.Split解析乱码字符串异常篇
摘要:描述:在分析游戏服务器端游戏消费日志项目中使用到Regex.Split解析文本.该文本中每行是通过\t来间隔每个字段.但是碰到无法识别的乱码时,此种解析方式无法正常解析字符串.分析:由于现在的游戏服务器端涉及到的语种语系非常繁多,并且,现在的用户非常喜欢使用"火星文",因此,在日志中涉及到角色名称的地方,经常会出现不可识别的乱码.而我们在编程过程中由于都是在默认在简体系统下开发,打开文本文件编码均为GB2312,由于是UNICODE字符集,因此,相隔两位会乱码如果可以被识别为一个UNICODE字符,那么就无法正常解析出\t 解决:通过改变文件打开的编码格式,为UTF-8 不
阅读全文
可遇不可求的Question之不支持一个STA 线程上针对多个句柄的WaitAll
摘要:不支持一个 STA 线程上针对多个句柄的 WaitAll。题设:在.NET开发多线程控制台程序过程中,由于业务要求,需要实现"一次扫描多笔订单",然后,通过多线程实现并发提交的逻辑.因此,在控制台程序中采用了多线程记录.由于下一次操作必须等待所有的记录并发提交完成后,才能进行下一步循环操作.在多线程操作后,使用了WaitAll命令.但是在此过程中,报异常"不支持一个STA 线程上针对多个句柄的WaitAll ".分析:经过研究MSDN,发现,在控制台程序的每个主函数Main之前,都有一个[STAThread]方法属性,该属性标识当前控制台程序的线程模型为
阅读全文
可遇不可求的Question之FusionCharts图表显示异常的解决办法
摘要:关于FusionCharts图表宽度width的设置问题导致图表显示异常的解决办法 题设:经常使用FusionCharts图表的朋友可能会遇到这个问题.就是在FusionCharts显示的时候有时候会显示出不完整的图表,现象是只显示标题,但是标题不居中,同时看不见图表,或者是只显示Y轴,而X轴的数据全部都重叠在Y轴上,完全无法看清.查看FLASH加载完成,并且FLASH右键菜单弹出正常.这个时候,如果页面刷新几下就正常了.或者页面前进,后退一下也会正常.如下图所示:分析:刚开始的时候以为是因为网络慢,下载FLASH不实时,导致脚本展现无法同步造成的.后来,发现是有的机子会出现这种情况,有的机子
阅读全文
可遇不可求的Question之安装的.NET Framework版本以及Service Pack
摘要:1.首先找到你的.NET框架的目录 %systemroot%\Microsoft.NET\Framework 文件夹2.找到对应版本文件夹下的mscorlib.dll3.参照以下列表,根据mscorlib.dll的版本,就可以判断出服务器目前的.NET版本咯.NETFramework版本修订版版本1.0原始 RTM.NET Framework Service Pack 1.NET Framework Service Pack 2.NET Framework Service Pack 31.0.3705.01.0.3705.2091.0.3705.2881.0.3705.60181.1原始 RT
阅读全文
可遇不可求的Question之由于数据移动,未能继续以NOLOCK方式扫描篇
摘要:描述:执行SQLSERVER 查询操作过程中,提报异常"由于数据移动,未能继续以NOLOCK方式扫描"分析:当使用 NOLOCK 锁定提示或设置为 READ UNCOMMITTED 的事务隔离级别扫描时,可能会删除扫描当前位置处的页。当这种情况发生时,Microsoft® SQL Server™ 将无法继续扫描。该错误终止查询。解决:重新提交查询或删除NOLOCK锁定关键字。
阅读全文
可遇不可求的Question之DateTime.Ticks的单位篇(囧rz)
摘要:描述:一直以来我都认为DateTime.Ticks的单位是10^-3秒,而且一直认为 1微秒 = 10^-3秒,囧rz.分析:直到某天无意中看到MSDN:public long Ticks { get; }此属性的值表示自 0001 年 1 月 1 日午夜 12:00:00 以来已经过的时间的以 100 毫微秒为间隔的间隔数。and then..."100毫微秒"是神么浮云!!!!,"毫微秒"又是神么浮云!!!囧rz.囧rz.囧rz.解决:以下是常识,有常识的人请飘过....:=======================================
阅读全文
可遇不可求的Question之SQLLite创建持久视图篇
摘要:描述:目前系统使用到SQLLite存储本地数据,由于数据量级在百万级以上,同时又要根据不同需求,对这百万级数据进行各种条件的排序并保存.分析:为了达到对不同条件排序的效果,考虑使用到持久化视图.SQLLite虽然可以创建视图,但是视图是只读的(Views are read-only in SQLite),SQLLite本身是无法创建持久化视图的.解决:in many cases you can use an INSTEAD OF trigger on the view to accomplish the same thing. 可以通过在视图上创建INSTEAD的触发器来实现对视图数据的修改.
阅读全文
可遇不可求的Question之MYSQL获取自增ID的四种方法篇
摘要:1. select max(id) from tablename2.SELECT LAST_INSERT_ID() 函数LAST_INSERT_ID 是与table无关的,如果向表a插入数据后,再向表b插入数据,LAST_INSERT_ID会改变。在多用户交替插入数据的情况下max(id)显然不能用。这时就该使用LAST_INSERT_ID了,因为LAST_INSERT_ID是基于Connection的,只要每个线程都使用独立的 Connection对象,LAST_INSERT_ID函数将返回该Connection对AUTO_INCREMENT列最新的insert or update 操作生成
阅读全文
可遇不可求的Question之SQLLite操作百万级数据的优化篇
摘要:描述:SQLite数据库本质上来讲就是一个磁盘上的文件,所以一切的数据库操作其实都会转化为对文件的操作,而频繁的文件操作将会是一个很耗时的过程,会极大地影响数据库存取的速度。例如:向数据库中插入100万条数据,在默认的情况下执行相应的操作,就会打开和关闭文件100万次,所以速度当然会很慢。分析:在入库和更新过程中按照数据库事务的思想进行设计:SQLite执行入库、更新操作的方式是,语句执行对象句柄调用库函数打开文件、调用函数执行sql语句、关闭文件。这样的执行方式对于数量级别超大的文件的弊端就是每次执行sql语句的时候都要打开文件(假设百万级数量级的数据,就要打开和关闭文件百万次),对于数据库
阅读全文
可遇不可求的Question之MYSQL4.1版本之前不支持子查询的解决方案篇
摘要:描述:在MYSQL4.1版本之前的MYSQL数据库语法中,很悲剧的不支持子查询.所以,对于相对复杂一些的语句,一般通过拆分SQL语句为简单语句,也可以实现相关业务.但是考虑逻辑处理,处理复杂度等原因,希望能够找到一种替代方案.解决:可以通过使用left join inner jion right jion 左右内联连接来达到子查询对应的效果.在其他数据库中相应SQL语法也可以适用.考虑到数据库移植的问题,这种方案比较具有通用性.示例:采用子查询语句:Code highlighting produced by Actipro CodeHighlighter (freeware)http://ww
阅读全文
可遇不可求的Question之连接Oracle的.NET驱动篇
摘要:NET 4.0 以后版本将弃用 OracleClient (System.Data.OracleClient)。这里收集了几个第三方的.NET驱动Oracle发布针对.NET的免费Oracle数据提供程序(ODP.NET) ODP.NET 11g与所有版本的Oracle数据库兼容(包括9.2版本),在同一个操作系统上可安装多个版本。 (推荐性能优于OracleClient)DataDirect ADO.NET 针对Oracle数据提供程序 100%托管代码,免费试用 Devart公司开发的Oracle数据提供程序dotConnect
阅读全文
可遇不可求的Question之MySqlClient访问tinyint字段返回布尔值篇
摘要:症状:使用MySqlClient访问tinyint unsign 字段返回布尔值 true 和 false,但是实际上该字段存储值为1-255分析:由于在Mysql中没有布尔类型值,MySqlClient在访问tinyint类型字段时默认作为布尔值使用。解决:1.在连接串中增加 Treat Tiny As Boolean=false 配置.2.对应字段在SQL语句中*1,这样,读取出的字段值默认会被转换成int类型.相关资料: 根据官方文档 10.1.1. Overview of Numeric Types ,在 MySql 中还没有严格的 bool 类型,但使用 TINYINT(1) 隐式用
阅读全文
可遇不可求的Question之SQLSERVER增加表计算列篇
摘要:使用SQLSERVER 计算列需要注意以下几点:慢慢补充1。注意计算列的公式必须是可以返回确定结果的语句,即自定义函数是不能作为计算列的公式的,但是系统函数是可以的2。注意设置计算列的持久性为ON时,该数据库必须将 SET ARITHABORT 参数设置为ON ,否则无法生成持久性字段。3。因为下列 SET 选项的设置不正确:'ARITHABORT'。请确保 SET 选项可正确用于计算列和/或查询...
阅读全文
可遇不可求的Question之要复制的 LOB 数据的长度超出了配置的最大值篇
摘要:SQL SERVER设置了在复制中一个UPDATE,INSERT,WRITETEXT和UPDATETEXT语句可以添加到复制列的最大数据量为65536Byte(64k),对于数据量大于64K的列并不采用自动截取的方式而是不允许插入或者更新来保证数据的完整性。使用 max text repl size 选项可以重新设定字段 text 和 image 数据的大小(单位为字节)。它的缺省值是64K, 上...
阅读全文
可遇不可求的Question之公共语言运行库检测到无效的程序篇
摘要:下面总结了导致该异常的几种原因和解决办法:1.这是一个编译器错误,通常产生在将C#等托管语言生成为MSIL时候出的错,没有什么好的解决办法,现在可行的方法好像就是修改现在的程序结构,这样根据新的结构生成新的MSIL时不会出错就基本可以避免这个问题。2.公共运行库被混淆造成,可以尝试更新为不混淆或者加密的版本。3.在主调程序中引用了不同版本的dll库,注意检查匹配版本,或者可以解释为编译不完全造成的...
阅读全文
可遇不可求的Question之调用的目标发生了异常篇
摘要:导致发生此种异常有可能是通过反射调用了方法,或者调用的 COM 等第三方语言编写的组件所致。可以通过跟踪Exception.InnerException 属性来确定最终导致异常的原因。
阅读全文
可遇不可求的Question之MYSQL的10060和10061错误篇
摘要:10060错误:与mysql服务所在的硬件服务器连接不上。
10061错误:存在物理线路到硬件服务器而且开机着,即ping得通。但是mysql服务连接不上。
阅读全文
浙公网安备 33010602011771号