高性能`try ... catch`(替代?)

时间:2016-03-03 10:45:42

标签: c# performance loops try-catch gdi+

这可能听起来像一个奇怪的问题,但
我在C#中使用GDI +编写了一种图形计算器。我对结果及其“通常”表现感到满意。

唯一的问题是,如果函数没有完全定义,渲染方法将会出现巨大的性能问题,这是由于我的渲染循环中存在try..catch块:

private void draw(....,Graphics g)
{
    // this is e.g. the function ƒ(x) := x⁻¹
    Func<double, double> mathematical_method = .....;

    ...

    // The variables `left` and `right` are the visible pixels translated
    // into function coordinates, so that we only draw the pixels we really need
    for (double x = left; x < right; x += step)
        try
        {
            // Draws the lines of the graph at their respected points
            g.Draw( ......  x, mathematical_method(x));
        }
        catch
        {
            // in case of a non-definition
            g.Draw( ..whatever.. )
        }

    ...
}

正如您可能已经猜到的那样 - 这不是最好的解决方案,所以我想知道,是否有可能使这个try..catch - 阻止更高性能(例如通过某种方式禁用CLR的方法,这是负责堆栈跟踪收集等。)或如何以其他方式解决此问题....

<小时/> 编辑№1:我忘了提及,用户可以在计算器中输入任何数学表达式(无需给出表达式的完整定义集) - 所以if...else不是真是一个选择...

我的随机想法:我可以以某种方式实现function cache在第一次绘图迭代中使用try..catch然后'学习',其中函数f未定义。

<小时/> 1)“未完全定义”是指例如函数ƒ : ℝ\{0}⟶ℝ : x⟼x⁻¹没有为x值0

定义

0 个答案:

没有答案