我正在使用SSDeepfuzzy.dll
对大量文件执行模糊散列。在多线程应用程序中使用非线程安全的DLL
如果我依次运行哈希,它一切正常。如果我尝试使用多线程,它会下降(该应用程序终止,没有例外信息,并在日志中没有任何内容)
我假设该DLL不是线程安全的,并且一个线程试图读取另一个的内存或类似的东西。
我想要做的就是让每个线程都拥有自己的dll副本。请注意,这不是一个实例 - 它全部是静态的/共享的 - 我只是想模拟如果引用dll的两个进程同时运行会发生什么 - 它们会拥有自己的内存空间等等。 ..
这可能没有实际产卵多个进程?
<DllImport("C:\SSDeep\Fuzzy.dll",
EntryPoint:="fuzzy_hash_filename",
CallingConvention:=CallingConvention.Cdecl)>
Private Shared Function fuzzy_hash_filename(
<InAttribute(),
MarshalAsAttribute(UnmanagedType.LPStr)>
ByVal Filename As String,
ByVal Result As StringBuilder) As Integer
End Function
Public Shared Function FuzzyHash(Filename As String) As String
Dim Ret As New StringBuilder
Ret.Capacity = NativeConstants.FUZZY_MAX_RESULT
Dim Success = fuzzy_hash_filename(Filename, Ret)
If Success <> 0 Then
Throw New Exception("SSDeep fuzzy hashing failed")
End If
Return Ret.ToString
End Function
没有什么聪明的,我可以用应用程序域或西米做LAR?奇怪的是,多个副本的dll实际上可能比多个进程更可取,但我需要生成inter-on-the-fly。我没有考虑过 – Basic 2012-08-07 12:23:42