我如何才能获得XElement的孩子?
我目前正在使用XElement.Descendants()函数,它返回所有级别的XElements,而不仅仅是子节点.
我真正想要的只是孩子们的IEnumerable.
我写财务应用程序,我经常决定使用双倍与使用小数.
我的所有数学都适用于小数不超过5位且不大于~100,000的数字.我觉得所有这些都可以表示为双打而不会出现舍入错误,但从未确定过.
我会继续从小数转换为双倍以获得明显的速度优势,除了在一天结束时,我仍然使用ToString方法将价格传送到交易所,并且需要确保它始终输出数字I期望.(89.99而不是89.99000000001)
问题:
更新:在我的应用程序可以运行之前,我必须处理大约100亿次价格更新,并且我已经实现了带有小数的明显保护原因,但是只需要约3个小时才能打开,双打会大大减少我的开启时间.有没有一种安全的方法来做双打?
我试图了解在x64和x86中运行本机C#/ .Net 4.0应用程序时存在哪些性能差异.我理解内存注意事项(x64寻址所有内存,x86限制为2/4gb),以及x64应用程序将使用更多内存的事实(所有指针都是8字节而不是4字节).据我所知,这些都不应该影响任何时钟时钟指令,为64管线是足够宽,能够处理更广泛的说明.
由于每个线程的堆栈大小较大,上下文切换是否会影响性能?我在评估两者时缺少哪些性能考虑因素?
我最近从VS2012 RC升级到RTM,自从升级到RTM后,我再也无法访问nuget了.我在Manage NuGet Packages窗口中收到以下错误.
The ServicePointManager does not support proxies with the https scheme.
Run Code Online (Sandbox Code Playgroud)
我在之前的堆栈溢出问题中查看了此处提供的解决方案,但它并不适用于我,因为我不在防火墙后面(当然不应该通过http://whatismyipaddress.com/proxy-check验证).我还可以看到RSS feeds/VS可以访问其他网络资源,在上一个问题中,问题与所有VS互联网流量有关,而不仅仅是NuGet,就像我的情况一样.
可能导致这种情况的任何想法,或者如何恢复对NuGet的访问?我在工作的机器上和家里的个人电脑上试过这个,都有同样的效果.
我在VS 2010中注意到C#项目的默认平台目标是x86(它曾经是任何CPU),并且想知道为什么要进行更改.
编译器是否基于将平台修复为x86 vs x64 vs任何CPU来执行任何优化?
出于性能原因,我应该将我的应用程序强制转移到一个平台还是另一个平台?
.Net 3.5 SP1的Math.Round函数似乎将0.5舍入为零,而它的舍入值为1.5到2.0.我用十进制数测试了这个,以下代码:
decimal pos = 0.5m;
decimal neg = -0.5m;
Console.WriteLine("Pos: {0} Rnd: {1}", pos, Math.Round(pos));
Console.WriteLine("Neg: {0} Rnd: {1}", neg, Math.Round(neg));
Console.ReadKey();
Run Code Online (Sandbox Code Playgroud)
此代码输出以下内容:
Pos:0.5 Rnd:0 Neg:-0.5 Rnd:0
这似乎是一个明显的错误.有一个已知的工作吗?我在Core2处理器和i7上测试了这个,所以它似乎不是硬件.而Reflector只是说decimal.round函数最终调用系统调用.
让我知道是否有其他人看到这个.
我试图安全地将小数转换为整数.
就像是
public static bool Decimal.TryConvertToInt32(decimal val, out int val)
Run Code Online (Sandbox Code Playgroud)
如果它不能转换为整数,则返回false;如果可以,则返回true.
这是为了避免在decimal.ToInt32方法中捕获OverflowException.最简单的方法是什么?
有没有一种简单的方法可以将匿名类型重构为类?我经常使用匿名类型对我的代码进行原型设计,然后必须返回并重新实现各种类,因为它们需要在本地范围之外使用.我正在使用resharper,并想知道是否有一个简单的方法来做到这一点.
我正在Windows Server 2003 x64(2x Xeon 4核心触发器)上运行一个大型.net 4.0 x86应用程序,并且遇到了我的应用程序〜每天2-3次冻结30秒,然后恢复正常运行的问题.该应用程序每周只重启一次,消耗400-800 MB的内存,所以我假设这些冻结是垃圾收集.我只看到日志中的冻结,而不是现场,或者我会检查任务管理器确认.
我试图找出哪个.Net 4 GC正在运行,以及如何将GC切换到新的并发背景gc(如果不是),或者如何确认这些实际上是GC(Procmon不显示.Net) Win2k3服务器中的仪器).
我在服务器类Windows 2012 R2机器上遇到麻烦,偶尔会将其托管的.net堆增加到10GB以上(通常应该是1-2 GB).我在Gen2集合之后对此框进行了内存转储,以尝试查找在堆上分配的对象.
使用WinDbg/SOS
!dumpheap -stat
Run Code Online (Sandbox Code Playgroud)
生成一个对象列表,其中最大的是〜150mb的内存,并快速下降.将此输出拉入excel并添加TotalSize,我只获得1.5 GB的对象(符合我的预期).
MT Count TotalSize Class Name
00007ffb1ab87a70 1 24 System.Collections.Generic.GenericEqualityComparer`1[[System.UInt64, mscorlib]]
...
00007ffabc178e40 218274 36670032 Ten.RunBar
00007ffabbd172f8 1048576 41943040 Ten.DisruptorTaskTuple
00007ffb1a0502c0 442990 71357200 System.Object[]
00007ffabc1bbce0 676327 97391088 Ten.BalTuple
00007ffabbd5eea8 2342912 149946368 Ten.Run.TaskAction
0000001bf119dc70 1072558 787427166 Free
MANUALLY CALCULATED TOTAL: 1589298584
Run Code Online (Sandbox Code Playgroud)
我的第一个想法是有一些非托管内存泄漏所以我检查了堆
!EEHeap -gc
Run Code Online (Sandbox Code Playgroud)
这表明GC堆大小本身实际上是10GB
Number of GC Heaps: 1
generation 0 starts at 0x0000001e10623cb0
generation 1 starts at 0x0000001e10485bb0
generation 2 starts at 0x0000001b80001000
ephemeral segment allocation context: none
segment begin allocated …Run Code Online (Sandbox Code Playgroud)