Recursive Function Calls Throw StackOverFlowException

I've to call a function recursively. But after a moment it throws StackOverFlowException. When I used Invoke(new Action(Start)) method, it throws same exception but not in a long moment, this is shorter than the previous one. How can I overcome this problem? Example Code: private void Start() { // run select query mysql(selectQueryString.ToString());

递归函数调用抛出StackOverFlowException

我必须递归调用一个函数。 但过了一会儿,它会抛出StackOverFlowException。 当我使用Invoke(new Action(Start))方法时,它会抛出相同的异常,但不会很长时间,这比前一个更短。 我怎样才能克服这个问题? 示例代码: private void Start() { // run select query mysql(selectQueryString.ToString()); msdr = mysql(); // is finished if (!msdr.HasRows)

C# compilation with tail recursive optimization?

Based on the rich wealth of stackoverflow, I've been getting on and off answers on whether the tail recursive optimization is done to specifically c# code. A few of the questions appeared to talk about Speculation of the optimization in newer versions of .net that were being released Building application as a x64bit application to achieve the optimization Switching from a debug build t

C#编译尾部递归优化?

基于丰富的stackoverflow财富,我一直在回答关于尾递归优化是否针对特定的c#代码。 一些问题似乎在谈论 推测正在发布的.net新版本中的优化 将应用程序构建为x64bit应用程序以实现优化 在Visual Studio中从调试构建切换到发布构建以实现优化 没有任何优化,并且微软社区声称他们不会为“安全问题”做尾递归优化(并没有真正理解这个问题) 它随机发生 因此,从C#4.0(Visual Studio 2013/2015)开始,如果可以确保尾

Why doesn't .NET/C# optimize for tail

I found this question about which languages optimize tail recursion. Why C# doesn't optimize tail recursion, whenever possible? For a concrete case, why isn't this method optimized into a loop (Visual Studio 2008 32-bit, if that matters)?: private static void Foo(int i) { if (i == 1000000) return; if (i % 100 == 0) Console.WriteLine(i); Foo(i+1); } JIT c

为什么.NET / C#没有针对尾部进行优化

我发现了关于哪些语言优化尾递归的问题。 为什么C#不尽可能地优化尾递归? 对于具体情况,为什么不将该方法优化为循环(Visual Studio 2008 32位,如果重要的话)?: private static void Foo(int i) { if (i == 1000000) return; if (i % 100 == 0) Console.WriteLine(i); Foo(i+1); } JIT编译是一个棘手的平衡行为,不需要花太多时间进行编译阶段(从而大大减缓了短期应用程序),也没有

Debug vs. Release performance

I've encountered the following paragraph: “Debug vs. Release setting in the IDE when you compile your code in Visual Studio makes almost no difference to performance… the generated code is almost the same. The C# compiler doesn't really do any optimization. The C# compiler just spits out IL… and at the runtime it's the JITer that does all the optimization. The JITer does have a D

调试与发布性能

我遇到以下段落: “在Visual Studio中编译代码时,IDE中的Debug vs. Release设置与性能几乎没有区别......生成的代码几乎相同。 C#编译器没有做任何优化。 C#编译器只是吐出IL ......并且在运行时它是JITer完成所有优化。 JITer确实有调试/发布模式,这对性能有很大的影响。 但是,这并不关键是否运行项目的调试或发布配置,这关键在于是否连接了调试器。“ 来源在这里,播客在这里。 有人可以指引我看看能够证明这一

Why are async state machines classes (and not structs) in Roslyn?

Let's consider this very simple async method: static async Task myMethodAsync() { await Task.Delay(500); } When I compile this with VS2013 (pre Roslyn compiler) the generated state-machine is a struct. private struct <myMethodAsync>d__0 : IAsyncStateMachine { ... void IAsyncStateMachine.MoveNext() { ... } } When I compile it with VS2015 (Roslyn) the ge

为什么Roslyn中的异步状态机类(而不是结构体)?

让我们考虑一下这个非常简单的异步方法: static async Task myMethodAsync() { await Task.Delay(500); } 当我编译VS2013(Roslyn编译器之前)时,生成的状态机是一个结构体。 private struct <myMethodAsync>d__0 : IAsyncStateMachine { ... void IAsyncStateMachine.MoveNext() { ... } } 当我用VS2015(Roslyn)编译它时,生成的代码是这样的: private sealed class <myMetho

Performance differences between debug and release builds

I must admit, that usually I haven't bothered switching between the Debug and Release configurations in my program, and I have usually opted to go for the Debug configuration, even when the programs are actually deployed at the customers place. As far as I know, the only difference between these configurations if you don't change it manually is that Debug have the DEBUG constant defined

调试和发布版本之间的性能差异

我必须承认,通常我不会在我的程序中调试和发布配置之间切换,而且我通常选择进行调试配置,即使这些程序实际部署在客户的地方。 据我所知,这些配置之间的唯一区别是,如果您不手动更改它,则Debug将定义DEBUG常量,并且Release将检查Optimize代码。 所以我的问题实际上是双重的: 这两种配置有很大的性能差异。 是否有任何特定类型的代码会导致性能差异很大,还是实际上并不那么重要? 是否有任何类型的代码在Debug配

Best approach for designing F# libraries for use from both F# and C#

I am trying to design a library in F#. The library should be friendly for use from both F# and C#. And this is where I'm stuck a little bit. I can make it F# friendly, or I can make it C# friendly, but the problem is how to make it friendly for both. Here is an example. Imagine I have the following function in F#: let compose (f: 'T -> 'TResult) (a : 'TResult -> unit) = f >&g

设计F#库以供F#和C#使用的最佳方法

我试图在F#中设计一个库。 图书馆应该对F#和C#都很友好。 这就是我被卡住的地方。 我可以让F#友好,或者我可以让C#友好,但问题是如何使它对两者都友好。 这是一个例子。 想象一下,我在F#中有以下功能: let compose (f: 'T -> 'TResult) (a : 'TResult -> unit) = f >> a 这从F#完全可用: let useComposeInFsharp() = let composite = compose (fun item -> item.ToString) (fun item -&g

Simplest ways to cause stack overflow in C#, C++ and Java

I'm watching a C# tutorial and came across StackOverflowException. the narrator gave a neat example of such an exception using the code snippet below, public class Employee { private string _name; public string Name { get{ return Name; } } } I'm looking for some example of this type of simple code in C++ and Java and more specially in javascript that can cause

在C#,C ++和Java中导致堆栈溢出的最简单方法

我正在看C#教程,并遇到了StackOverflowException。 叙述者使用下面的代码片段给出了这样一个例外的简单例子, public class Employee { private string _name; public string Name { get{ return Name; } } } 我在C ++和Java中寻找这种类型的简单代码的一些例子,更特别是在JavaScript中可能导致堆栈溢出。 在Java中: public class Test { public static void main(String[] args) {

Infinite recursion in C

Given the C program with infinite recursion: int main() { main(); return 0; } Why would this result in a stack overflow. I know this results in undefined behaviour in C++ from the following thread Is this infinite recursion UB? (and as side node one can't call main() in C++). However, valgrind tells me this leads to a stack overflow: Stack overflow in thread 1: can't grow stac

C中的无限递归

给定具有无限递归的C程序: int main() { main(); return 0; } 为什么会导致堆栈溢出。 我知道这导致在C ++中的未定义行为从以下线程是这个无限递归UB? (并且作为边节点,不能在C ++中调用main() )。 但是,valgrind告诉我这会导致堆栈溢出: Stack overflow in thread 1: can't grow stack to 0x7fe801ff8 然后最后程序由于分段错误而结束: ==2907== Process terminating with default action of signal 1

BitmapSource vs Bitmap

7 months ago, we started to learn C# and WPF, and, as all newbies who want to do some image processing, we ran into this question : Why is there a Bitmap and a BitmapSource ? And what are the advantages of each ? In our project, we had to generate a bitmap from data. Speed was very important for us. We started with Bitmap because it is easier (expecialy methods : get/setpixel), well docum

BitmapSource与位图

7个月前,我们开始学习C#和WPF,作为所有想要做图像处理的新手,我们遇到了这样的问题: 为什么有一个位图和一个BitmapSource? 每个的优点是什么? 在我们的项目中,我们必须从数据生成位图。 速度对我们来说非常重要。 我们从Bitmap开始,因为它更容易(例如方法:get / setpixel),有很多例证。 但后来我们发现了WPF中打印位图的转换问题。 所以我们尝试使用BitmapSource,由于不同的像素格式,这并不容易。 但