随笔分类 -  C#

摘要:两个线程,主线程中update update(){ while(queue.count >0){ //process.... queue.pop() } } 子线程中: queue.enqueue(data) 这样做是没有问题的: 主线程: pop (){ enqueue() { 1, delete 阅读全文
posted @ 2018-11-03 13:05 时空观察者9号 阅读(891) 评论(0) 推荐(0)
摘要:U3D的MOBA项目,测试过程中,10分钟以后,游戏帧率开始缓慢下降,约3-5分钟后,由60帧下降到小于10帧,编辑器模式。 打开profiler,看到CPU占用非常高,每帧都有24K的GC, 时间占用曲线上看是script大量占用CPU时间。 第一印象,应该是泄漏造成的。定位办法,profiler 阅读全文
posted @ 2018-11-01 19:58 时空观察者9号 阅读(264) 评论(0) 推荐(0)
摘要:这个很容易出BUG,且很难查。由于递归层次很深,容器可能反复的增加删除元素,不同层级之间的清空与增加极易造成难以察觉的冲突。 这个问题从10年前读书时写算法到现在已经遇到过不知多少次了,可每次都记不住这个教训,写下,以后牢记。 阅读全文
posted @ 2018-10-31 11:26 时空观察者9号 阅读(297) 评论(0) 推荐(0)
摘要:这个工具有点意思 阅读全文
posted @ 2018-10-19 09:01 时空观察者9号 阅读(814) 评论(0) 推荐(0)
摘要:var lst = new List(); lst.Capacity = 100; var cnt = lst.Count; var cp = lst.Capacity; for(int i=0; i<30; ++i) { ... 阅读全文
posted @ 2018-10-15 21:38 时空观察者9号 阅读(519) 评论(0) 推荐(0)
摘要:通常,我们设计游戏引擎时,或者管理器时,都会由管理器产出各种产品,一旦有新产品要加,就要修改管理器,来增加相应的生成代码。 这从设计上来看有两个问题: 1,管理器参数需要有个类型,在管理器中用if else根据类型来生产不同产品 2,违反了设计原则“对修改封闭,对扩展开放” 使用者使用时要通过管理器 阅读全文
posted @ 2018-09-23 16:50 时空观察者9号 阅读(202) 评论(0) 推荐(0)
摘要:C#的优点:1,不会有运行时崩溃,解决了C++的痛点一,难预防,难查错2,使用文件不需要包含进来,只需要using namespace即可,解决了C++的痛点二,包含复杂,路径复杂,编译复杂3,编译速度极快,解决了C++的痛点三4,库代码易懂,智能提示好。std::map<int, <error-t 阅读全文
posted @ 2018-09-17 16:35 时空观察者9号 阅读(151) 评论(0) 推荐(0)
摘要:摘自: more effective c# 9. 对数组跟集合使用foreach 循环数组或集合有三种方式: 第一种: foreach(int i in foo) foreach(int i in foo) { { // do somethings. // do somethings. } } 第二 阅读全文
posted @ 2018-09-17 11:07 时空观察者9号 阅读(149) 评论(0) 推荐(0)
摘要:在class中的结构体内存在堆上,因为class是引用类型。 函数中直接new出的单一结构体对象,内存在栈上。 new出的结构体数组,内存在栈上,因为数组是引用类型。 阅读全文
posted @ 2018-09-11 22:46 时空观察者9号 阅读(1029) 评论(0) 推荐(0)
摘要:相同点:字典和map都是泛型,而hashtable不是泛型。 不同点:三者算法都不相同 Hashtable,看名字能想到,它是采用传统的哈希算法:探测散列算法,而字典则采用的是散列拉链算法,效率较高,空间也小。Stl:map使用的是红黑树算法,效率最低为o(nlogn) 这里要注意的是 dictio 阅读全文
posted @ 2018-09-06 19:57 时空观察者9号 阅读(246) 评论(0) 推荐(0)
摘要:在西山居的这篇U3D cheatsheet中,提到: c12. 确保 struct 实现了 Equals() 和 GetHashCode() 这怎么理解? 首先,看下system.object.equals和 ReferenceEquals的实现: public static bool Refere 阅读全文
posted @ 2018-09-06 13:11 时空观察者9号 阅读(188) 评论(0) 推荐(0)
摘要:ST ot;//分配在栈上 ST[] arrt = new ST[2];//分配在堆上,因为数组是引用 阅读全文
posted @ 2018-09-06 09:32 时空观察者9号 阅读(159) 评论(0) 推荐(0)
摘要:using System; using System.Collections.Generic; //using System.Linq; using System.Text; using System.Diagnostics; using System.IO; using static System.Console; using System.Linq; using System.Runtime... 阅读全文
posted @ 2018-08-14 11:25 时空观察者9号 阅读(372) 评论(0) 推荐(0)
摘要:1,"a" + "b" + 3 strcat double d = 3object obj = dint i = (int)obj --异常测试下装箱拆箱的时间,似乎很慢拆装箱的本质??看IL代码 "abbcd"是个引用?s = "a" 有装箱吗?s + "b" 有装箱吗? where T :str 阅读全文
posted @ 2018-08-05 08:18 时空观察者9号 阅读(278) 评论(0) 推荐(0)
摘要:一、抽象类: 抽象类是特殊的类,只是不能被实例化(可以用派生类实例化基类对象);除此以外,具有类的其他特性;重要的是抽象类可以包括抽象方法(当然它可以有普通方法),这是普通类所不能的。抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须重写(覆盖)它们。 二、接口: 接口包含了一组方法的原型,接 阅读全文
posted @ 2018-08-04 19:38 时空观察者9号 阅读(396) 评论(0) 推荐(0)
摘要:来自:https://blog.csdn.net/caoshangpa/article/details/51530685 1、概述 首先要看TCP/IP协议,涉及到四层:链路层,网络层,传输层,应用层。 其中以太网(Ethernet)的数据帧在链路层 IP包在网络层 TCP或UDP包在传输层 TCP 阅读全文
posted @ 2018-08-04 17:25 时空观察者9号 阅读(715) 评论(0) 推荐(0)
摘要:1,"a" + "b" + 3 strcat double d = 3object obj = dint i = (int)obj --异常测试下装箱拆箱的时间,似乎很慢拆装箱的本质??看IL代码 "abbcd"是个引用?s = "a" 有装箱吗?s + "b" 有装箱吗? where T :str 阅读全文
posted @ 2018-08-03 07:18 时空观察者9号 阅读(158) 评论(0) 推荐(0)
摘要:亲测:unity5.5之前:通过VS工程属性查看.NET版本为3.5, 对应unity中没有可查看的项,只有一个Api Compatibility level 是.net subset2.0,看名字,猜测是最低支持的版本,再低就不支持了。 unity2018.2,通过VS工程属性查看.NET版本也是 阅读全文
posted @ 2018-07-31 16:01 时空观察者9号 阅读(1345) 评论(0) 推荐(0)
摘要:1 using System; 2 using System.Collections.Generic; 3 //using System.Linq; 4 using System.Text; 5 using System.Diagnostics; 6 using System.IO; 7 using static System.Console; 8... 阅读全文
posted @ 2018-07-30 16:56 时空观察者9号 阅读(418) 评论(0) 推荐(0)
摘要:#region 常量和静态变量静态类readonly //---------------------------------------------------------------------- //常量和静态变量,静态类 //-----------------------------------------------------------... 阅读全文
posted @ 2018-07-30 16:52 时空观察者9号 阅读(247) 评论(0) 推荐(0)