Tag: C#的

C#十进制数据types的性能

我正在写C#的财务应用程序,其中性能(即速度)是至关重要的。 因为这是一个金融应用程序,我不得不集中使用Decimal数据types。 我已经尽可能在代码分析器的帮助下优化了代码。 在使用Decimal之前,所有事情都是使用Double数据types完成的,速度要快几倍。 然而,Double不是一个选项,因为它的二进制性质,在多个操作过程中会导致很多精确的错误。 有没有任何十进制库,我可以与C#接口,可以给我一个性能改善超过原生的十进制数据types在.NET中? 基于我已经得到的答案,我注意到我还不够清楚,所以这里有一些额外的细节: 应用程序必须尽可能快(即使用Double而不是Decimal就是梦想)。 Double的速度比Decimal快大约15倍,因为操作是基于硬件的。 硬件已经是一stream的(我在双氙气四核上运行),并且应用程序使用线程,所以CPU使用率始终是100%。 此外,该应用程序运行在64位模式,这使得它具有超过32位的测量性能优势。 我已经优化了过去的理智点(一个半月以上的优化;不pipe信不信,现在大概需要做相同的计算所花费的约1/5000)。 这个优化涉及到一切:string处理,I / O,数据库访问和索引,内存,循环,改变某些事情的方式,甚至在所有地方都使用“切换”。 分析器现在清楚地显示了其余的性能原因在于十进制数据types运算符。 没有别的东西加起来相当长的时间。 你必须在这里相信我:我已经尽可能地去C#.NET的领域来优化应用程序,我对它当前的性能感到非常惊讶。 我现在正在寻找一个好主意,以提高十进制性能接近双。 我知道这只是一个梦,但只是想检查我想到的一切可能。 🙂 谢谢!

我可以使用C ++,C进行Android编程吗?

我可以使用C ++,C进行Android编程吗? 如果答案是“是”,那么请告诉如何? 什么程序设置? 我不懂Obj-C,Java,但熟悉Google发布的C,C ++,Flash AS3,SDK。 请不要告诉NVDIA SDK它没有完全开发:)

generics在C#中 – 我怎样才能创build一个带有参数的variablestypes的实例?

我有一个generics类,在那里我想用genericstypes实例化一个对象。 我想为该types的构造函数使用参数。 我的代码: public class GenericClass<T> where T : Some_Base_Class, new() { public static T SomeFunction(string s) { if (String.IsNullOrEmpty(s)) return new T(some_param); } } 我得到了一个错误 new T(some_param) 'T':创buildvariablestypes的实例时不能提供参数 任何想法我怎么能做到这一点?

如果您在“我们不使用例外”阵营,那么您如何使用标准库?

注意:我不是在这里扮演魔鬼的拥护者或者类似的东西 – 我真的很好奇,因为我本人不在这个阵营。 标准库中的大多数types都具有可以抛出exception(例如,如果内存分配失败)的突变函数或可以抛出exception的非突变函数(例如超出索引访问器的范围)。 除此之外,许多免费函数可能会抛出exception(例如operator new和dynamic_cast<T&> )。 在“我们不使用例外”的情况下,你如何处理这个问题? 你想永远不要调用一个可以抛出的函数吗? (我看不出如何扩展,所以我很感兴趣,听听你是如何做到这一点的) 你可以使用标准库抛出,你把“我们不使用exception”当作“我们从不抛出exception,我们从来没有从其他代码中捕获exception”? 你是否通过编译器开关完全禁用exception处理? 如果是这样,标准库的exception抛出部分如何工作? 编辑你的构造函数,他们可以失败,或者你是否按惯例使用一个专用的初始化函数,可以返回一个失败的错误代码(构造函数不能),或者你做别的什么? 编辑在问题问世1周后进行小幅度的澄清……下面的评论和问题的大部分内容都集中在例外与“其他”的方面。 我的兴趣不在于此,但是当你select“别的东西”的时候,你如何处理那些抛出exception的标准库部分呢?

为什么我应该使底层types的Enum Int32而不是字节?

鉴于以下枚举: public enum Operations_PerHourType : byte { Holes = 1, Pieces = 2, Sheets = 3, Strips = 4, Studs = 5 } 当我运行微软的代码分析工具时,它告诉我: CA1028:Microsoft.Design:如果可能,使底层types的“Enums.Operations_PerHourType”System.Int32而不是“字节”。 它永远不会超过几个可能的值,所以我把它声明为一个字节。 他们为什么会推荐使用int32? 未来可扩展性的更多价值? 还是有性能改进?

在C#/ .NET中,为什么sbyte 与byte 相同,除非它不是?

我只是在C#/。NET中观察到一个奇怪的现象。 我创build了这个最小的例子来演示: if (new sbyte[5] is byte[]) { throw new ApplicationException("Impossible!"); } object o = new sbyte[5]; if (o is byte[]) { throw new ApplicationException("Why???"); } 这将抛出“为什么???”,而不是“不可能!”。 它适用于所有相同大小的整型数组。 谁可以给我解释一下这个? 我很困惑。 顺便说一句,我正在使用.NET 4。 PS:我知道我可以通过使用o.GetType() == typeof(byte[])来获得预期的结果。

CMake:make后如何将目录的内容复制到build目录下

我在源文件旁边的“config”目录中有一些configuration文件(xml,ini,…)。 每次我创build项目时,如何将configuration目录中的所有文件复制到构build目录(可执行文件旁边)?

BSTR到std :: string(std :: wstring),反之亦然

在C ++中使用COM时,string通常是BSTR数据types。 有人可以使用像CComBSTR或MS的CString BSTR包装。 但是因为我不能在MinGW编译器中使用ATL或MFC,有没有标准的代码片段将BSTR转换为std::string (或std::wstring ),反之亦然? 还有一些类似于CComBSTR BSTR非MS封装? 更新 感谢所有以任何方式帮助我的人! 只是因为没有人解决BSTR和std::string之间的转换问题,我想在这里提供一些关于如何做到这一点的线索。 下面是我用来将BSTR分别转换为std::string和std::string到BSTR的函数: std::string ConvertBSTRToMBS(BSTR bstr) { int wslen = ::SysStringLen(bstr); return ConvertWCSToMBS((wchar_t*)bstr, wslen); } std::string ConvertWCSToMBS(const wchar_t* pstr, long wslen) { int len = ::WideCharToMultiByte(CP_ACP, 0, pstr, wslen, NULL, 0, NULL, NULL); std::string dblstr(len, '\0'); len = ::WideCharToMultiByte(CP_ACP, 0 /* no flags */, pstr, […]

stream畅的C#接口和inheritance

我将通过示例来展示一个问题。 有一个stream畅的界面的基类: class FluentPerson { private string _FirstName = String.Empty; private string _LastName = String.Empty; public FluentPerson WithFirstName(string firstName) { _FirstName = firstName; return this; } public FluentPerson WithLastName(string lastName) { _LastName = lastName; return this; } public override string ToString() { return String.Format("First name: {0} last name: {1}", _FirstName, _LastName); } } 和一个孩子class: class […]

当传入另一个对象时,谁应该在IDisposable对象上调用Dispose?

是否有任何指导或最佳做法围绕谁应该在一次性对象传入另一个对象的方法或构造函数时调用Dispose() ? 以下是我的意思的几个例子。 IDisposable对象被传入一个方法(一旦它完成,它是否应该处理它): public void DoStuff(IDisposable disposableObj) { // Do something with disposableObj CalculateSomething(disposableObj) disposableObj.Dispose(); } IDisposable对象被传递给一个方法并且引用被保留(当MyClass被丢弃时它是否应该处理它): public class MyClass : IDisposable { private IDisposable _disposableObj = null; public void DoStuff(IDisposable disposableObj) { _disposableObj = disposableObj; } public void Dispose() { _disposableObj.Dispose(); } } 我目前认为在第一个例子中, DoStuff()的调用者应该处理对象,因为它可能创build了对象。 但在第二个例子中,感觉像MyClass应该处理对象,因为它保持对它的引用。 问题在于调用类可能不知道MyClass已经保存了一个引用,因此可能决定在MyClass完成使用之前处理该对象。 这种场景是否有任何标准规定? 如果有的话,当一次性对象被传递给构造函数时它们有什么区别吗?