Tag: C#的

是否有可能使一个匿名类inheritance另一个类?

这是一个很长的一步,但我有一个有趣的编码情况,我希望能够创build匿名类的能力,但能够将它们作为parameter passing给期望接口或子类的方法。 换句话说,我希望能够做到这样的事情: public class MyBase { … } public void Foo(MyBase something) { … } … var q = db.SomeTable.Select(t => new : MyBase // yeah, I know I can't do this… { t.Field1, t.Field2, }); foreach (var item in q) Foo(item); 除了使用命名类之外,还有什么办法可以做到吗?

完整的.NET OpenCL实现

我一直在寻找,但有一点运气。 有没有任何有效的OpenCL的.NET绑定实现? (如果需要,我会为CUDA采取一些措施)。 我遇到了各种各样的实现,CUDA.NET,OpenCL.NET,OpenTK / Cloo(我知道,他们经常提到的是stackoverflow),但他们似乎都处于alpha阶段,或者完全没有可用的例子。 CUDA.NET有一些帮助文件,但它只是一个库引用,它并不真正帮助你入门。 我希望find的是在.NET中用于GPU编程的成熟库。 最终我需要能够在F#中编写代码,但是我会采用任何.NET兼容的语言,因为我以后可以随时转换它,并使用包含的任何示例来启动和运行。 自从我搜遍了所有内容,大概是一个长镜头,但是我希望这只是其中一个我不知道要寻找的东西的情况。 任何帮助将不胜感激。

为什么我们在C ++中使用std :: function而不是原来的C函数指针呢?

在原始T1 (*)(T2) , std::function<T1(T2)>的优点是什么?

任何关于使用emacs进行C ++项目的好build议?

我正在寻找一篇关于使用emacs作为C / C ++ IDE的好文章。 就像Steve Yegge的“Effective emacs”一样 。

“该操作对于事务状态”错误和事务范围无效

当我尝试调用包含SELECT语句的存储过程时出现以下错误: 该操作对交易状态无效 这是我的电话结构: public void MyAddUpdateMethod() { using (TransactionScope Scope = new TransactionScope(TransactionScopeOption.RequiresNew)) { using(SQLServer Sql = new SQLServer(this.m_connstring)) { //do my first add update statement //do my call to the select statement sp bool DoesRecordExist = this.SelectStatementCall(id) } } } public bool SelectStatementCall(System.Guid id) { using(SQLServer Sql = new SQLServer(this.m_connstring)) //breaks on this line […]

如何提高memcpy的性能

概要: memcpy似乎无法在真实或testing应用程序中在我的系统上传输超过2GB /秒。 我能做些什么来获得更快的内存到内存拷贝? 全部细节: 作为数据采集应用程序的一部分(使用一些专用硬件),我需要将大约3 GB /秒的临时缓冲区拷贝到主内存中。 为了获取数据,我给硬件驱动程序提供了一系列缓冲区(每个2MB)。 硬件DMA将数据发送到每个缓冲区,然后在每个缓冲区满时通知我的程序。 我的程序清空缓冲区(memcpy到另一个较大的RAM块),并将处理后的缓冲区重新发送到卡再次填充。 我有memcpy移动数据足够快的问题。 看起来内存到内存的拷贝速度应该足够快,可以在我运行的硬件上支持3GB /秒的速度。 Lavalys EVEREST给我提供了9337MB / sec的内存复制基准testing结果,但是即使在一个简单的testing程序中,我也无法使用memcpy获得接近这些速度的任何地方。 我通过添加/删除缓冲区处理代码中的memcpy调用来隔离性能问题。 没有memcpy,我可以运行完整的数据速率 – 约3GB /秒。 在启用memcpy的情况下,我仅限于550Mb / sec(使用当前的编译器)。 为了在我的系统上对memcpy进行基准testing,我已经编写了一个单独的testing程序,在一些数据块上调用memcpy。 (我已经发布了下面的代码)我已经在我使用的编译器/ IDE(National Instruments CVI)以及Visual Studio 2010中运行了这个。虽然我目前没有使用Visual Studio,但我愿意如果能够产生必要的性能,就可以进行切换。 但是,在盲目转移之前,我想确保它能解决我的memcpy性能问题。 Visual C ++ 2010:1900 MB /秒 NI CVI 2009:550 MB /秒 虽然我并不感到奇怪CVI比Visual Studio慢很多,但是我对memcpy的性能这么低感到惊讶。 虽然我不确定这是否可以直接比较,但这比EVEREST基准带宽要低得多。 虽然我不需要相当的性能水平,但至less需要3GB /秒。 标准库的实现肯定不会比EVEREST所使用的更糟糕! 在这种情况下,我能做些什么来加快memcpy的速度? 硬件细节:AMD Magny […]

C比C ++明显更快

据我所知,所有的脚本语言和核心科学程序通常用C语言编写, 这使得实现混乱,但直接到了一个地步。 我知道这些人想要最大化他们的performance,但使用Cstring和C结构使用C ++类有真正的区别; 除了虚拟函数外,C ++似乎也是以相同的方式工作的,它会一次存储一个类函数,并且该类的每个实例都会调用这个函数。 是什么让C更快,是一个像python或sqlite这样的项目中的一个显着的差异,必须是最快的?

我应该复制一个std ::函数,或者我总是可以参考它吗?

在我的C ++应用程序(使用Visual Studio 2010)中,我需要存储一个std ::函数,如下所示: class MyClass { public: typedef std::function<int(int)> MyFunction; MyClass (Myfunction &myFunction); private: MyFunction m_myFunction; // Should I use this one? MyFunction &m_myFunction; // Or should I use this one? }; 正如你所看到的,我在构造函数中添加了函数参数作为参考。 但是,将函数存储在我的类中的最佳方法是什么? 我可以存储函数作为参考,因为std :: function只是一个函数指针,并保证函数的“可执行代码”保留在内存中? 如果lambda传递并且调用者返回,是否必须创build副本? 我的直觉告诉我们,存储一个引用(甚至是一个const引用)是安全的。 我希望编译器在编译时为lambda生成代码,并在应用程序运行时将此可执行代码保存在“虚拟”内存中。 因此,可执行代码永远不会被“删除”,我可以安全地存储对它的引用。 但这是真的吗?

可以定义一个完全一般的swap()函数吗?

以下片段: #include <memory> #include <utility> namespace foo { template <typename T> void swap(T& a, T& b) { T tmp = std::move(a); a = std::move(b); b = std::move(tmp); } struct bar { }; } void baz() { std::unique_ptr<foo::bar> ptr; ptr.reset(); } 不为我编译: $ g++ -std=c++11 -c foo.cpp In file included from /usr/include/c++/5.3.0/memory:81:0, from foo.cpp:1: /usr/include/c++/5.3.0/bits/unique_ptr.h: In […]

Constexprmath函数

所以从这个页面上注意到,在c ++ 11中没有一个math函数似乎使用了constexpr,而我相信它们都可以。 所以这给我留下了两个问题,一个是他们为什么不selectfunction。 一个像sqrt这样的函数我可以写自己的constexpr,但是像sin或者cos这样的东西会更棘手,所以围绕它就会出现。