【问题标题】:Approach - 32bit versus having a try-catch, together with iSeries ODBC driver方法 - 32 位与使用 try-catch 以及 iSeries ODBC 驱动程序
【发布时间】:2013-09-18 07:26:40
【问题描述】:

我对选择什么有疑问,我希望得到您的意见,因此,答案将是给谁提供最具建设性的反馈(现在您知道我希望得到什么)

情况。 我有这个 dll,我在公司网站的许多不同项目中使用它, 它的主要用途是某种数据包装器,我指定一些参数,然后它选择正确的连接字符串并针对某个数据库运行查询。 所以它的主要作用是以统一的方式从不同的数据库中取回数据,然后再进行处理。

麻烦开始在我身上落下。 这个 dll 正在使用 odbc 驱动程序来获取它的数据, 其中之一是名为“iSeries Access ODBC Driver”的 64 位驱动程序 这个驱动程序有这个特定的问题,如果我尝试获取它的数据类型,它会在少数情况下导致溢出

临时解决方案 所以我做了这个热修复,使用try-catch来检测有问题的列,如果catch块被命中,我将数据类型设置为字符串。 ODBC 获取数据没有问题,我只是无法检测数据是十进制还是字符而不使用 try-catch.... 也就是说,在64位版本的驱动中,32位版本的驱动就好了。

我的选择

  1. 使用 try-catch 并留在 64 位世界中
  2. 跳过 try-catch 并留在 32 位世界中
  3. 以字符串形式获取所有数据,然后编写一些“十进制检测”代码进行评估

小记 我刚刚升级了驱动,旧版本更糟糕,现在我至少有一些功能,它是从 2005 年开始的,新的也表现得更好,我也在 C# 中制作了这个库,并且正在使用 .net 4

【问题讨论】:

    标签: c# performance odbc try-catch 32bit-64bit


    【解决方案1】:

    这取决于您将获得的异常数量...如果抛出太多异常,.NET 中的异常会相当慢。如果是一分钟就没有问题...否则...

    Get all the data as string, then code some "decimal detection" code to evaluate 可能是更好的一个。至少你可以使用decimal.TryParse

    【讨论】:

    • 在某些代码中,我不会得到任何报告,但某些报告(通常是较大的报告)我会得到数千个,
    • @No-Chip Thousand 太多了 :-) 第三个选项,然后 :-) :-)
    • 如果一个单元格看起来像数据是十进制的,但实际上只是带有一些点和逗号的字符串数字,(这是丹麦语,所以我需要将所有小数点转换为逗号)转换一切由于隐式语言数字转换,to string 给了我一些奇怪的结果......我可能还不想使用 3. 选项,所以现在归结为,我应该使用 32 位选项还是 try catch 中的性能在 64 位选项中:)
    • @No-Chip 你应该使用 varculture = new CultureInfo("da-DK", false);十进制; bool success = decimal.TryParse("Mystring", System.Globalization.NumberStyles.Number,culture, out dec)` 而不是简单地将 . 替换为 ,
    • 我不会替换 :) 对不起,如果我给了你这个想法,我正在使用 odbc.getstring 或 odbc.getdecimal(或其他)来获取数据,这使用默认文化, (我检查它是“da-DK”)所以这工作正常,但感谢您的代码,这可能只是通过十进制检测来获取数据,我将在星期一进行测试!我可能需要更详细地解释情况。感谢您一贯的帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-03
    • 1970-01-01
    • 2011-09-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多