|
Assuming each simulation takes a small amount of input data, and generates a significant amount of output data, this is what I would do:
- create a single queue with "jobs" (instances of a Job class), each job describing one simulation, with the associated input values;
- have N threads each executing the same code, basically a loop getting a job from the job queue (needs a lock while dequeueing, not while simulating); have each thread stuff its results in:
= the Job object itself, if that is reasonnable (depends on amount and kind of results);
= its own output container (a queue, a file, whatever);
= a shared resource, such as a database.
- launch these N threads where N would equal the number of processors available (i.e. Environment.ProcessorCount), or the number of processors you willing to spend to this work.
- if necessary, have some post-processing that collects all the results, sorts them in the order you want, etc.
The one thing you must watch out for, is results requiring locks for too long a period (in case you use a shared output container), causing other threads to stall.
BTW: if there are many jobs, there is no need to first stuff them all in a queue, you could as well have a separate process that continues to feed the job queue while your simulator threads are already processing some jobs.
Note: if the calculating threads have reasons to stall (e.g. they need file, network, or database data) then you should observe the processor load (with Task Manager) and basically raise N till the CPU is fully loaded. Adding more threads beyond that point isn't going to improve things, and may even work against you.
|
|
|
|
|
i need to run a encryption and decryption algorithm which is written in c language and call the exe file in vb.net and show the output in form window.
|
|
|
|
|
|
Good link...
I quit being afraid when my first venture failed and the sky didn't fall down.
|
|
|
|
|
you gave a -ive vote...
|
|
|
|
|
prdshukla wrote:
you gave a -ive vote...
How do you know it was him? It could have been anybody.
|
|
|
|
|
yeah..you are right...but may be by mistake he may have done it..
The rating process is not very intuitive...
|
|
|
|
|
How can Good Answer, Bad Answer not be intuitive? It's hard to see how it could be any easier.
BTW - it looks like it was two people who didn't like your answer.
|
|
|
|
|
You may have received the 1s because he says it's an EXE, not a DLL.
|
|
|
|
|
Perhaps this[^] might be of use? (At least the concepts involved might be what you want.)
|
|
|
|
|
<DllImport("E:\Temp\simple.dll", CallingConvention:="CallingConvention.Cdecl)"> _
Private Shared Sub ReturnInParam(ByRef Stan As Integer, _
ByRef Message As String)
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
Dim Num As Integer = 8
Dim Message As String = "Harun"
ReturnInParam(Num, Message)
MessageBox.Show(Message)
End Sub
|
|
|
|
|
You can run the exe in the shell, but I'm not sure about the cmd window. I didnt need it, but thi scode will scrape the hidden cmd box for the shel output, in whichyou can regex the return values.
Private Function Shell_Exceute_FLV(ByVal Parameters_FFMpeg As String) As String
Dim Context As HttpContext = HttpContext.Current
Dim SB_FFMpeg As StringBuilder = New StringBuilder
Try
Dim Results As String = Nothing
Dim ffmpeg As New Process()
Dim ffmpeg_StartInfo As New ProcessStartInfo(Path_FFMPEG, Parameters_FFMpeg)
ffmpeg_StartInfo.UseShellExecute = False
ffmpeg_StartInfo.RedirectStandardError = True
ffmpeg_StartInfo.RedirectStandardOutput = True
ffmpeg.StartInfo = ffmpeg_StartInfo
ffmpeg.Start()
Dim ffmpeg_StreamReader As IO.StreamReader = ffmpeg.StandardError
SB_FFMpeg = New StringBuilder()
SB_FFMpeg.Append(ffmpeg_StreamReader.ReadToEnd().ToString())
Do While Not ffmpeg.WaitForExit(1000)
SB_FFMpeg.Append(ffmpeg_StreamReader.ReadToEnd().ToString())
Loop
If ffmpeg.ExitCode = 0 Then
ffmpeg.Close()
If Not ffmpeg_StreamReader Is Nothing Then
ffmpeg_StreamReader.Close()
End If
Else
ffmpeg.Close()
If Not ffmpeg_StreamReader Is Nothing Then
ffmpeg_StreamReader.Close()
End If
End If
ffmpeg.Close()
ffmpeg.Dispose()
ffmpeg = Nothing
Catch ex As Exception
End Try
Return SB_FFMpeg.ToString
End Function
|
|
|
|
|
hi every body!
I'm using Enterprise Library caching (memory caching) in my project. every thing works OK but when the application starts up for the first time I have a none ignorable delay! I can not understand the reason
every suggestion would be appreciated
|
|
|
|
|
Caches take time to fill up, to overcome this fill your cache on a separate thread.
Its the man, not the machine - Chuck Yeager
If at first you don't succeed... get a better publicist
If the final destination is death, then we should enjoy every second of the journey.
|
|
|
|
|
You should define priority of the data and load only the most important data while starting the App\service and put rest of the data load process on a background worker thread.
And it would be better if you do caching on server side rather than on client side. In case if it's really required to have a client caching, try using a different alternate something like SQL compact DB which could be shipped with the release binary rather than getting loaded each time when the App is launched.
Hope it helps.
|
|
|
|
|
Hi all again,
I'm focussing on the problem of persistence encapsulation with ADO.NET EF. AFAIK Entity Data Model (EDM) is another layer contains entities and associations... but where persistence is in fact encapsulated? If I work with POCO is correct to argue that persistence (and data access) is obtained in the ObjectContext where an EntitySQL or a LINQ to entities query will return an EntityObject?
I'm basing this assumption on this table[^]
Thanks
Ste
Ste
|
|
|
|
|
How to Forward Email by programattically?
Thanks
Alok Kumar Sharma
|
|
|
|
|
|
I made a change to an XML schema on a website; the file is located in App_Data/Schemas . It was the first of eight that the site uses, and the change involved adding a new element.
Now, opening any source file on the site results in a warning: Errors occured while compiling the Xml schemas in the project. Because of this, Xml intellisense is not available. There is no line or column number in the warning, and as far as I can tell, Intellisense on the linked XML files works just fine.
The weird thing is, I deleted the schema and restarted VS. Now I get the same warning on the schema that is now at the top of the list. I created a new, empty schema using the Add New wizard, gave it a name that put it at the top of the list, and now it is throwing the warning. I deleted that text and manually typed in the deleted schema, renamed the file and saved it, and it is still throwing the warning.
This is ridiculous.
It would seem that the compiler itself is bugged. How can I go about getting rid of this warning, without having to turn off display of all warnings?
|
|
|
|
|
I've been getting the same error for a few weeks now (although using VS2010). I haven't been able to track it down, and the error just opens the schema, but doesn't highlight any errors. Nothing is actually failing, and at this point (until something actually does fail), I'm chalking it up to a mystery bug somewhere in the IDE.
Shocking, I know. I'll bet that somehow, next time VS updates, it just as mysteriously disappears.
|
|
|
|
|
During batch job processing i found lots of Deadlock occurance in logfile. Is it code issue or Database setting issue. I have 2-thread two-core CPU.
I am running this batch with 2-threads and maximum batch-size=1000.
In database setting for initrans=5 and maxtrans=250.
It causes when I run batch process with hundreds of thousands records. Please help me here.
LogFile error
General Level="High" Type="Custom" Severity="Notice" TimeStamp="2011-08-30 09:54:45" Message="WD: FAILED: An exception was caught during the execution of an action query: ORA-00060: deadlock detected while waiting for resource
. Check InnerException, QueryExecuted and Parameters of this exception to examine the cause of this exception. ---
|
|
|
|
|
The deadlock occurs when two or more sessions wait for the locks that are held by the opposite session. For more info,: http://www.oracle-base.com/articles/misc/Deadlocks.php[^].
Deadlock is a code issue. The best way to avoid deadlock is to make the changes to the tables always in the same order.
If you run a batch modifications, one possibility could be to lock the entire table before the batch starts. However the downside is that no-one can make modifications to this table while your batch is running.
|
|
|
|
|
Dimpal170 wrote: I am running this batch with 2-threads and maximum batch-size=1000.
In database setting for initrans=5 and maxtrans=250.
It causes when I run batch process with hundreds of thousands records. Please help me here.
Presumably what you mean is the following.
You need to process (insert/update) hundreds of thousands of records.
You are batching with a maximum of 1000 updates/inserts in one batch (where 1000 is a chunk of the total amount of processing to be done.)
You are using two threads each of which does its own batch (1000 at a time.)
If you are not doing that then please explain what it is that you are doing.
Are you processing data while doing the batch or doing nothing but the SQL?
Have you considered using the database import tool?
|
|
|
|
|
My XAML for the viewer window looks something like this:
<Window>
<DockPanel LastChildFill="True">
<StackPanel DockPanel.Dock="Bottom" Orientation="Horizontal">
<Button Width="100" Height="25" Click="Save_Click">Save</Button>
</StackPanel>
<FlowDocumentScrollViewer DockPanel.Dock="Top" VerticalScrollBarVisibility="Auto">
<FlowDocument x:Name="flowDoc" Background="White" PagePadding="5">
<BlockUIContainer>
<!--
</BlockUIContainer>
</FlowDocument>
</FlowDocumentScrollViewer>
</DockPanel>
</Window>
The Save_Click handler looks like this:
private void Save_Click(object sender, RoutedEventArgs e)
{
SaveFileDialog dialog = new SaveFileDialog();
dialog.DefaultExt = "xps";
dialog.Filter = "XPS Document (*.xps)|*.xps";
dialog.OverwritePrompt = true;
if (dialog.ShowDialog() == true)
{
using (Package package = Package.Open(dialog.FileName, FileMode.Create, FileAccess.ReadWrite))
{
using (XpsDocument xpsDoc = new XpsDocument(package, CompressionOption.Maximum))
{
XpsSerializationManager rsm = new XpsSerializationManager(new XpsPackagingPolicy(xpsDoc), false);
DocumentPaginator paginator = ((IDocumentPaginatorSource)flowDoc).DocumentPaginator;
rsm.SaveAsXaml(paginator);
rsm.Commit();
}
}
}
}
Now when I click the "Save" button and enter a file name. The document is saved to a XPS file and all is good. HOWEVER, the FlowDocumentScrollViewer goes completely blank once the file is written to disk.
Is there any way to prevent this behaviour? I've tried some code to clone the FlowDocument via the use of TextRange etc. But the problem with this approach is that the UI elements isnt included in the cloned document, only regular text elements.
|
|
|
|
|