Tag: C#的

是否有内置的.NETexception,指示非法的对象状态?

如果遇到非法状态,应该抛出什么exception – 例如,一次只能被调用一次的初始化方法被第二次调用? 我真的没有看到任何有意义的内置exception。 这似乎是应该在框架内的东西 – 我不是在正确的位置戳?

什么时候值得使用数据库?

我有一个关于数据库的问题,在什么地方值得深入研究。 我主要是一名embedded式工程师,但是我正在编写一个使用Qt与我们的控制器进行交互的应用程序。 我们有一个奇怪的地方,就是我们有足够的数据可以实现一个数据库(大约700多个项目和不断增长)来pipe理所有的事情,但我不知道现在是否值得现在处理。 使用从excel生成的文件和parsing的文件实现GUI是没有问题的,但是即使使用VBA脚本,也很难跟踪。 我一直在玩转换我们的数据到Microsoft Access的应用程序方面更可pipe理,似乎运作良好。 如果解决了这个问题,我只需要使用SQL数据库和使用Qt库来访问和修改它。 我没有太多的经验来pipe理这个级别的数据,我很好奇什么是解决这个问题的最好方法。 那么在这种情况下使用数据库有什么好处呢? 我意识到这其中的大部分都可以是特定于应用程序的,但是关于如何跨越embedded式/应用程序编程线的一些总体思路和build议将会有所帮助。 这不是关于将数据库放入embedded式项目。 这也不是一个通常使用大型数据库的业务types应用程序。 我正在为桌面上的单个用户devise一个GUI,以便与微控制器进行交互以进行监视和configuration。 我决定去与SQLite。 你可以用一些非常有意思的事情来做这些事情,但是在第一次启动这个项目时,我并没有真正考虑过这个选项

堆Win32下的腐败; 如何定位?

我正在研究一个正在破坏堆的multithreading C ++应用程序。 find这种腐败的常用工具似乎不适用。 源代码的旧版本(18个月)与最新发布的版本具有相同的行为,所以这已经存在了很长时间,并没有被注意到。 在缺点方面,不能使用源variables来确定何时引入错误 – 存储库中有很多代码更改。 崩溃行为的提示是在这个系统中生成吞吐量 – 数据的套接字传输被转化为内部表示。 我有一组testing数据,将定期导致应用程序exception(各种地方,各种原因 – 包括堆分配失败,因此:堆损坏)。 这种行为似乎与CPU功率或内存带宽有关; 每台机器越多,崩溃越容易。 禁用超线程核心或双核心核心会降低(但不会消除)腐败的速度。 这表明了与时间有关的问题。 现在这里是擦: 当它运行在一个轻量级的debugging环境(比如说Visual Studio 98 / AKA MSVC6 )时,堆损坏是相当容易重现的 – 十分钟或十五分钟之后,某些事情会发生可怕的exception,例如alloc; 当在一个复杂的debugging环境(Rational Purify, VS2008/MSVC9甚至Microsoft应用程序validation程序)下运行时,系统将变成内存速度限制,不会崩溃(内存限制:CPU没有达到50% ,磁盘指示灯不亮,程序运行的速度可以更快,消耗2G内存的1.3G内存)。 所以, 我可以在能够重现问题(但不能确定原因)或能够确定原因或无法重现的问题之间作出select。 我目前最好的猜测,接下来是: 获取一个疯狂的grunty框(以取代当前的dev盒:在E6550 Core2 Duo 2Gb内存); 这将使得有可能在强大的debugging环境下运行时导致崩溃导致错误行为; 要么 重写操作符new和delete以使用VirtualAlloc和VirtualProtect将内存尽快标记为只读。 运行在MSVC6下,让操作系统抓住正在释放内存的坏人。 是的,这是一个绝望的标志:谁将重写new和delete ? 我想知道这是否会像Purify等人一样慢。 并且,否:内置Purify仪器的运输不是一个选项。 一位同事刚刚走过去,问道:“堆栈溢出?我们现在正在堆栈溢出吗?!? 现在,问题是: 如何find堆腐败者? 更新:平衡new[]和delete[]似乎已经得到了解决这个问题很长的路要走。 应用程序现在大约两个小时才崩溃,而不是15分钟。 还没有。 还有什么build议? 堆腐败持续存在。 […]

WPF的XAML StringFormatdate时间:错误的文化输出?

我在输出DateTime值时遇到了一些麻烦。 我的电脑目前的文化被设置为de-AT(奥地利)。 下面的代码 string s1 = DateTime.Now.ToString("d"); string s2 = string.Format("{0:d}", DateTime.Now); 导致s1和s2的值都是“30.06.2009”。 但是在XAML中使用相同的格式 <TextBlock Text="{Binding Source={x:Static sys:DateTime.Now}, StringFormat=d}"/> 输出是“6/30/2009”。 看来XAML StringFormat忽略了当前的文化设置。 这发生在Vista和XP上。 我不想指定自定义格式,因为输出应该在用户的首选文化设置中进行格式化。 任何人都有同样的问题? 这是在WPF中的错误?

静态和常量variables有什么区别?

有人可以解释一个static和constvariables之间的区别吗?

为什么C ++ 11 constexpr如此限制?

如您所知,C ++ 11引入了constexpr关键字。 C ++ 11引入了关键字constexpr,它允许用户保证函数或对象构造函数是编译时常量。 […]这允许编译器了解并validation[函数名称]是编译时常量。 我的问题是为什么有这样严格的限制,可以宣布的function的forms。 我明白希望保证这个function是纯粹的,但考虑一下: 在函数上使用constexpr会对函数的function施加一些限制。 首先,函数必须有一个非空的返回types。 其次,函数体不能声明variables或定义新的types。 第三,主体可能只包含声明,空语句和单个返回语句。 必须存在参数值,以便在参数replace之后,return语句中的expression式会生成一个常量expression式。 这意味着这个纯粹的function是非法的: constexpr int maybeInCppC1Y(int a, int b) { if (a>0) return a+b; else return ab; //can be written as return (a>0) ? (a+b):(ab); but that isnt the point } 你也不能定义局部variables… :(所以我想知道这是一个devise决定,还是做编译器吮吸,当涉及到certificate函数是纯粹的?

通过shared_ptr传递的代价

我在整个应用程序中广泛使用std :: tr1 :: shared_ptr。 这包括作为函数parameter passing对象。 考虑以下: class Dataset {…} void f( shared_ptr< Dataset const > pds ) {…} void g( shared_ptr< Dataset const > pds ) {…} … 虽然通过shared_ptr传递一个数据集对象保证了它在f和g中的存在,但这些函数可能被调用了数百万次,导致大量的shared_ptr对象被创build和销毁。 下面是最近运行的平面gprofconfiguration文件的一个片段: 每个样品计数为0.01秒。 累计自我累计 时间秒秒呼叫s /呼叫s /呼叫名称 9.74 295.39 35.12 2451177304 0.00 0.00 std :: tr1 :: __ shared_count :: __ shared_count(std :: tr1 :: […]

编译器是否允许优化堆内存分配?

考虑以下使用new简单代码(我知道没有delete[] ,但它不涉及这个问题): int main() { int* mem = new int[100]; return 0; } 编译器是否允许优化new调用? 在我的研究中, g ++(5.2.0)和Visual Studio 2015没有优化new调用, 而铿锵(3.0+) 。 所有的testing都是在启用完全优化的情况下完成的(-O3代表g ++和clang,Visual Studio的发布模式)。 是不是new进行下的系统调用,使编译器不可能(和非法)优化呢? 编辑 :我现在已经从程序中排除了未定义的行为: #include <new> int main() { int* mem = new (std::nothrow) int[100]; return 0; } 铿锵3.0不会优化出来 ,但后来的版本 。 编辑2 : #include <new> int main() { int* mem = new […]

为什么Clang优化这个代码?

代码的目的是find代表0到1之间的值的32位浮点位模式的总数。在我看来,这应该工作,但由于某种原因,从铿的组装输出基本上是return 0; 。 我用Clang 3.3和Clang 3.4.1编译,使用-std=c++1y -Wall -Wextra -pedantic -O2和-std=c++1y -Wall -Wextra -pedantic -O3 铿锵3.4使用-O2和-O3优化了所有的东西。 铿锵3.3只会优化-O3的所有function。 通过“优化一切”我的意思是这是程序的汇编输出: main: # @main xorl %eax, %eax ret #include <limits> #include <cstring> #include <cstdint> template <class TO, class FROM> inline TO punning_cast(const FROM &input) { TO out; std::memcpy(&out, &input, sizeof(TO)); return out; } int main() { uint32_t i = […]

我怎样才能开始制作一个C#RSS阅读器?

我一直想做一段时间的RSS阅读器(只是为了好玩),但是我从没有丝毫的想法,从哪里开始。 我不了解RSS的任何内容。 是否有任何关于RSS的好教程,以及如何在应用程序中实现它(而不是如何制作RSS阅读器的教程,这太容易了)。