使用多个线程时,C#P /调用ODBC32.dll失败

时间:2011-03-22 13:30:58

标签: c# multithreading pinvoke

更新:以下错误实际上是由于我错过了一个简单的错误。这里唯一真实的信息是疲惫和愚蠢是一个糟糕的组合。

由于我们被迫使用的ODBC驱动程序的某些特定功能,我一直在尝试编写一个直接使用ODBC调用的小应用程序。由于C#2.0是我最熟悉的,所以我一直在使用P / Invoke调用ODBC32.dll。

我最初写的代码是多线程的。但我注意到,只要我跳线程,我就会得到AccessViolationExceptions。例如,当我在一个线程中生成对环境和连接的IntPtr引用,然后尝试在生成Statement(SQLAllocStmt)时在另一个线程中使用这些引用时,它们都会弹出。

我相信我可以解决这个问题,但有一些明显的原因吗?由ODBC32.dll调用分配的非托管内存是否以某种方式绑定到特定线程?

1 个答案:

答案 0 :(得分:2)

这取决于:

  • odbc驱动程序:它是什么?
  • 你的代码:你是否在没有意识到的情况下释放内存?

考虑:

  • 你是否真的需要这样做。您无法使用连接字符串控制驱动程序的行为,还是通过命令对象使用特定于驱动程序的命令来控制驱动程序的行为?
  • 如果您必须这样做,是否可以将其隔离到单个STA线程中并使用编组或任务队列来简化您的工作?
  • 如果你必须从多个线程中使用它,你不能确保每个线程都拥有它自己的连接和环境吗?