Tag: C#的

为什么SortedSet <T> .GetViewBetween不是O(log N)?

在.NET 4.0+中,类SortedSet<T>具有一个名为GetViewBetween(l, r) ,该方法返回包含指定的两个值之间的所有值的树部分的接口视图。 鉴于SortedSet<T>被实现为红黑树,我自然希望它在O(log N)时间运行。 在C ++中类似的方法是std::set::lower_bound/upper_bound ,在Java中它是TreeSet.headSet/tailSet ,它们是对数的。 但是,这不是事实。 下面的代码在32秒内运行,而等价的GetViewBetween O(log N)版本将使这个代码在1-2秒内运行。 var s = new SortedSet<int>(); int n = 100000; var rand = new Random(1000000007); int sum = 0; for (int i = 0; i < n; ++i) { s.Add(rand.Next()); if (rand.Next() % 2 == 0) { int l = rand.Next(int.MaxValue / […]

如何在.NET运行时debugging内部错误?

我正在尝试debugging一些处理大文件的工作。 代码本身工作 ,但从.NET运行时本身报告零星的错误。 对于上下文来说,这里的处理是一个1.5GB的文件(只加载到内存中一次)被循环处理和释放,故意尝试重现这个不可预知的错误。 我的testing片段基本上是: try { byte[] data =File.ReadAllBytes(path); for(int i = 0 ; i < 500 ; i++) { ProcessTheData(data); // deserialize and validate // force collection, for tidiness GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced); GC.WaitForPendingFinalizers(); } } catch(Exception ex) { Console.WriteLine(ex.Message); // some more logging; StackTrace, recursive InnerException, etc } (有些时间和其他东西扔进去) 循环将处理罚款非确定性的迭代次数完全成功 – 没有任何问题; 那么这个过程将会突然终止。 exception处理程序没有命中。 […]

理解语言规范中描述的C#types推断的问题

C#语言规范描述了第7.5.2节中的types推断。 有一个细节,我不明白。 考虑以下情况: // declaration void Method<T>(T obj, Func<string, T> func); // call Method("obj", s => (object) s); Microsoft和Mono C#编译器都正确地推断T = object ,但是我对规范中的algorithm的理解会产生T = string ,然后失败。 这是我的理解: 第一阶段 如果Ei是一个匿名函数,则从Ei到Ti创build一个明确的参数types推断 (第7.5.2.7节) ⇒没有效果,因为lambdaexpression式没有明确的参数types。 对? 否则,如果Ei具有typesU并且xi是值参数,则从U到Ti进行下限推断 。 ⇒第一个参数是静态types的string ,所以这将string添加到T的下限,对不对? 第二阶段 所有不依赖于 (§7.5.2.5)任何Xj的非固定typesvariablesXi是固定的(§7.5.2.10)。 ⇒T是不固定的; T不依赖于任何东西…所以T应该是固定的,对吧? §7.5.2.11修复 候选typesUj的集合始于Xi的边界集合中的所有types的集合。 ⇒{ string (下界)} 然后,我们依次检查Xi的每个边界:对于Xi的每个下界U,从候选集合中删除所有typesUj,其中不存在从U的隐式转换。 […] ⇒不会从候选集中删除任何东西,对吗? 如果在剩余的候选typesUj中存在唯一的typesV,从其中隐含地转换到所有其他候选types,则将Xi固定为V. ⇒由于只有一个候选types,所以这是真实的,所以Xi被固定为string 。 对? 那么我哪里错了?

entity framework上下文是否应该使用陈述?

entity framework上下文对象实现了“释放对象上下文使用的资源”的Dispose()方法。 它究竟做了什么? 总是把它放到一个using {}语句中是不是一件坏事? 我已经看到使用和不使用using语句。 我特别要从WCF服务方法中使用EF上下文,创build上下文,执行一些linq并返回答案。 编辑:似乎我不是唯一一个想知道这个。 另一个问题是Dispose()方法中真正发生了什么。 有人说它closures连接,有些文章说不。 这是怎么回事?

entity framework如何与recursion层次结构一起工作? 包括()似乎不能使用它

我有一个Item 。 Item有一个Category 。 Category有ID , Name , Parent和Children 。 Parent和Children也属于Category 。 当我做一个特定Item的LINQ to Entities查询时,它不会返回相关的Category ,除非我使用Include("Category")方法。 但是它并没有把它的全部范畴与它的父母和孩子带到一起。 我可以做Include("Category.Parent") ,但是这个对象就像一棵树,我有一个recursion的层次结构,我不知道它在哪里结束。 我怎样才能使EF完全加载Category ,与父母和子女,父母与父母和子女,等等? 这不是整个应用程序的事情,考虑到性能方面的考虑,只需要这个特定的实体,类别。

创build一个“Hello World”WebSocket示例

我不明白为什么我不能使下面的代码工作。 我想用JavaScript连接到我的服务器控制台应用程序。 然后将数据发送到服务器。 这里是服务器代码: static void Main(string[] args) { TcpListener server = new TcpListener(IPAddress.Parse("127.0.0.1"), 9998); server.Start(); var client = server.AcceptTcpClient(); var stream = client.GetStream(); while (true) { var buffer = new byte[1024]; // wait for data to be received var bytesRead = stream.Read(buffer, 0, buffer.Length); var r = System.Text.Encoding.UTF8.GetString(buffer); // write received data to the […]

来自模板类的单个方法的模板特化

始终考虑包含我的模板化类的以下标题包含在至less两个.CPP文件中,此代码编译正确: template <class T> class TClass { public: void doSomething(std::vector<T> * v); }; template <class T> void TClass<T>::doSomething(std::vector<T> * v) { // Do somtehing with a vector of a generic T } template <> inline void TClass<int>::doSomething(std::vector<int> * v) { // Do somtehing with a vector of int's } 但是注意专业化方法中的内联。 代码不要有链接器错误(在VS2008中是LNK2005),因为方法被定义了多次。 我明白这一点,因为AFAIK一个完整的模板专门化就像一个简单的方法定义一样。 那么,如何删除inline ? 代码不应该在每次使用时重复。 […]

我可以在没有qmake或Qt Creator的情况下使用Qt吗?

我想使用Qt编程,但我不想使用特殊的编译器或IDE,如Qt Creator和qmake。 我想用Kate编写并用g ++编译。 我可以编译一个使用Q ++与g ++的程序吗? 如何用g ++编译它?

multithreading支持c11

新的C11标准提供了对multithreading的支持。 我的问题有点多样化,但绝对是可以回答的。 我看了一下C11 n1570草案。 它说: 支持multithreading执行,包括改进的内存sorting模型,primefaces对象和线程本地存储( <stdatomic.h>和<threads.h> ) 什么是改进的内存sorting模型 ? c99标准有哪些变化? 如果有人深入研究并试图解释所涉及的语义,我将不胜感激。 据我所知,C11提供了对以下方面的支持: 线程创build和pipe理 互斥 有条件的variables 线程特定存储& primefaces对象 我希望我没有错过任何东西? 从现在开始,标准库自身提供(将提供)multithreading所需的所有function,将来就不需要POSIX和这样的库(用于multithreading支持)。 最后,什么编译器提供对上述function的支持? 是否有任何时间表提及这些将被支持? 我记得C ++ 11有一个编译器支持和function的链接,也许是这样的?

使用多个MemoryCache实例

我想使用System.Runtime.Caching命名空间将cachingfunction添加到我的应用程序,并且可能要在几个地方和不同的上下文中使用caching。 为此,我想使用几个MemoryCache实例。 不过,我在这里看到,使用MemoryCache的多个实例是不鼓励的: MemoryCache不是一个单例,但是应该只创buildless数或者可能只有一个MemoryCache实例,并且caching项的代码应该使用这些实例。 多个MemoryCache实例如何影响我的应用程序? 我觉得这种奇怪,因为在我看来,在一个应用程序中使用多个caching是一个相当普遍的情况。 编辑:更具体地说,我有一个类应该保持每个实例的caching。 我应该避免使用MemoryCache并寻找不同的caching解决scheme吗? 在这种情况下使用MemoryCache被认为是不好的,如果是的话,为什么呢?