Tag: C#的

C ++ volatile关键字是否引入了内存栏?

我知道volatile告诉编译器该值可能会改变,但是为了完成这个function,编译器是否需要引入一个内存栏来使其工作? 根据我的理解,易失性对象的操作顺序不能重新sorting,必须保留。 这似乎意味着一些记忆栅栏是必要的,并没有真正的解决方法。 我说得对吗? 在这个相关的问题上有一个有趣的讨论 乔纳森·Wakely写道 : …对独立的volatilevariables的访问不能被编译器重新sorting,只要它们出现在单独的完整expression式中…正确的说,volatile对于线程安全来说是没有用处的,但不是出于他给出的原因。 这不是因为编译器可能会重新访问易失性对象,而是因为CPU可能会对它们进行重新sorting。 primefaces操作和内存屏障阻止了编译器和CPU重新sorting David Schwartz 在评论中回应: …从C ++标准的angular度来看,编译器在做某些事情和编译器发出的指令之间没有什么区别,这些指令会导致硬件做某些事情。 如果CPU可能将访问重新sorting为挥发性物质,则标准不要求保留其顺序。 … … C ++标准对重新sorting的内容没有任何区别。 而且你不能争辩说,CPU可以重新sorting它们没有可观察到的效果,所以没关系 – C ++标准定义它们的顺序是可观察的。 如果编译器生成的代码使平台达到标准所要求的水平,则编译器在平台上符合C ++标准。 如果标准要求访问挥发性物质不被重新sorting,那么重新sorting的平台不符合标准。 … 我的观点是,如果C ++标准禁止编译器重新sorting访问不同的挥发性物质,理论上这种访问的顺序是程序可观察行为的一部分,那么它也要求编译器发出禁止CPU执行的代码所以。 该标准并没有区分编译器的function和编译器的生成代码使CPU做什么。 这产生了两个问题:他们中的任何一个是“正确的”? 实际的实现真的在做什么?

我应该使用ThreadPools或任务并行库进行IO绑定操作

在我的一个项目中,这是一个聚合器,我从网上parsing源,播客等等。 如果我使用顺序方法,考虑到大量资源,处理所有资源需要相当长的时间(由于networking问题和类似的东西); foreach(feed in feeds) { read_from_web(feed) parse(feed) } 所以我想要实现并发性,并不能决定是否应该基本上使用ThreadPools来处理工作线程或只是依靠TPL来进行sorting。 ThreadPools肯定会用工作线程来处理我的工作,我会得到我所期望的(在多核CPU环境下,其他核心也将被使用)。 但是我仍然想考虑TPL,因为它是推荐方法,但我有点担心。 首先我知道TPL使用ThreadPools,但增加了额外的决策层。 我主要关心的是单核环境存在的情况。 如果我没有错,TPL从一开始就有一个数字的工作线程开始,等于可用CPU内核的数量。 我害怕TPL在序列方法上产生类似的结果,这是我的IO界限的情况。 所以对于IO绑定的操作(在我的情况下,从网上读取资源),是最好使用ThreadPools和控制的东西,或者更好的只是依靠TPL? TPL也可以用于IO界限的情况吗? 更新 :我主要关心的是 – 在单核CPU环境下,TPL只是performance得像顺序方法,还是会提供并发性? 我已经阅读了与Microsoft .NET并行编程,所以这本书,但无法find一个确切的答案。 注意:这是我以前的问题的重新措辞[ 是否可以一起使用线程并发和并行? ]这是错误的措词。

C ++包含和导入差异

#include和#import在C ++有什么区别?

为什么我不能在另一个函数里面定义一个函数?

这不是一个lambda函数的问题,我知道我可以分配一个lambda到一个variables。 允许我们声明,但不在代码中定义一个函数有什么意义? 例如: #include <iostream> int main() { // This is illegal // int one(int bar) { return 13 + bar; } // This is legal, but why would I want this? int two(int bar); // This gets the job done but man it's complicated class three{ int m_iBar; public: three(int bar):m_iBar(13 + bar){} operator […]

C#lambdaexpression式逆向<=

我见过一些使用<=运算符的代码。 你能解释什么是反向lambda的用法?

在.NET中是否有一个序列化的通用键/值对类?

我正在寻找一个可以包含在Web服务中的键/值对对象。 我尝试使用.NET的System.Collections.Generic.KeyValuePair<>类,但它不正确序列化在Web服务。 在Web服务中,Key和Value属性没有被序列化,使得这个类没有用处,除非有人知道解决这个问题的方法。 有没有其他的generics类可以用于这种情况? 我会使用.NET的System.Web.UI.Pair类,但它的types使用对象。 如果仅用于types安全性,那么使用通用类将会很好。

在64位版本的Windows上的WinForms应用程序中,VS2010不显示未处理的exception消息

当我创build一个新的项目,我得到一个奇怪的行为,未处理的exception。 这是我可以重现的问题: 1)创build一个新的Windows窗体应用程序(C#,.NET Framework 4,VS2010) 2)将下面的代码添加到Form1_Load处理程序: int vara = 5, varb = 0; int varc = vara / varb; int vard = 7; 我希望VS打破并在第二行显示一个未处理的exception消息。 但是,会发生什么情况是,第三行只是跳过没有任何消息,应用程序继续运行。 我现有的C#项目没有这个问题。 所以我想我的新项目是用一些奇怪的默认设置创build的。 有没有人有一个想法我的项目有什么问题? 我试图检查Debug-> Exceptions中的框。 但是,即使我在try-catch块中处理exception,执行也会中断; 这也不是我想要的。 如果我没有记错的话,在这个对话框中有一个名为“未处理的exception”的东西或者类似的东西,这会让我兴奋的想要什么。 但在我的项目中只有一列(“投掷”)。

将C#连接到Oracle数据库所需的最小客户机占用空间是多less?

通过在我的笔记本电脑上下载并安装客户端pipe理工具和Visual Studio 2008,我已成功连接到C#(Visual Studio 2008)中的Oracle数据库(10g)。 Oracle客户端工具的安装足迹超过了200Mb,并且相当长的时间。 有谁知道最小可行的足迹是什么? 我希望它是一个单一的DLL和一个注册命令,但我有我需要安装一个Oracle主页,并设置各种环境variables的感觉。 我在我的代码中使用Oracle.DataAccess。

在Windows窗体上绘制一个像素

我被困在试图打开Windows窗体上的一个像素。 graphics.DrawLine(Pens.Black, 50, 50, 51, 50); // draws two pixels graphics.DrawLine(Pens.Black, 50, 50, 50, 50); // draws no pixels API真的应该有一个方法来设置一个像素的颜色,但我没有看到一个。 我正在使用C#。

在C本身编写的GCC C编译器?

在C本身编写的GCC C编译器? 还是写在大会? 如果编译器是用C编写的,那么编译器用来编译编译器代码是什么?