|
You can't expect 500 threads to all run concurrently - the processor doesn't even allow this. You are familiar with time slices and the CPU, aren't you? Processes only get so much time. With that many threads, there's no way the CPU could service them all in a reasonable amount of time. That's why many web servers are multi-processor systems. You need to maintain better control of your threads.
If you look at the System.Threading namespace, you'll see several classes that can specify a timeout or wait indefinitely, but you should still avoid creating 500 threads. Consider designing your application so that you wait for threads to finish and then start another one. See the Threading[^] section in the .NET Framework SDK for information and examples.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
I know, I'm not that crazy to put 500 threads at a time...
I only keep 5 of them at time, when one finish the callback function it’s “--“ the counter so another can be created an start a new request.
So you see why I think that the threads are not the issue here, it's something with the way framework manage the HttpWebRequests …
|
|
|
|
|
If i create a library, and comment all public and protected members.
With the XML comments in C#.
Then the comments nicely pop up when im coding in other classes, or projects within the same solution that holds the project with the commented class.
But, when I now take the DLL, and reference not by project (not adding the project to my new solution), but by file reference, like how you would any third-party dll, the comments don't show up.
How do I tell the compiler to compile the xml comments into the dll. Or what do I have to do?
Thanks,
Kris.
|
|
|
|
|
The XML document that contains the comments must be in the same directory as the assembly you're referencing.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Consider an array of some object like ClassA. How can I quickly iterate thru this array using unsafe code and pointers? Could you please provide me a sample code?
Don't forget, that's Persian Gulf not Arabian gulf!
Murphy:Click Here![^]
Events and Delegates simplified:Click Here![^]
I'm thirsty like sun, more landless than wind...
|
|
|
|
|
I found this code:
using System;
class App {
unsafe static void Main() {
Int32[] arr = new Int32[] { 1, 2, 3, 4, 5 };
fixed (Int32* element = &arr[0]) {
for (Int32 x = 0, l = arr.Length; x <= l; x++) {
Console.WriteLine(element[x]);
}
}
}
}
I found it here[^], which I found as the first result by googling your words: "fast array iteration C# unsafe ".
- Daniël Pelsmaeker
"All e-mail I send starts with a "Hello Colin" and ends with a suitable goodbye. I get some funny looks from people who aren't called Colin, but at least it's polite."
-David Wulff
|
|
|
|
|
That's got to be the most useless code I've ever seen! Yeah, their using an unsafe context - but it's doing the same exact thing that the CLR would do in managed execution anyway. I doubt the performance payout is worth the lack of memory protection and the other problems you'll run into if this isn't run from the local machine (i.e., the MyComputer code group in reference to code access security).
Note - no offense meant to you. You simply re-posted this from a simple search result.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
If your array contains objects then the best thing to use is a for loop. Unsafe code isn't going to help much.
|
|
|
|
|
Is the object unmanaged? If not, it will be difficult. The GC is agnostic of pointers, so pointers are not allowed to reference types or structs that may appear (including structs with references) on the managed heap. If it were allowed, you could potentially wind up with heap resources referenced only by pointers that could be reclaimed while still in use.
From the language spec:
Unlike references (values of reference types), pointers are not tracked by the garbage collector - the garbage collector has no knowledge of pointers and the data to which they point. For this reason a pointer is not permitted to point to a reference or to a struct that contains references, and the referent type of a pointer must be an unmanaged-type.
An unmanaged-type is any type that isn't a reference-type and doesn't contain reference-type fields at any level of nesting. In other words, an unmanaged-type is one of the following:
sbyte, byte, short, ushort, int, uint, long, ulong, char, float, double, decimal, or bool.
The most exciting phrase to hear in science, the one that heralds the most discoveries, is not 'Eureka!' ('I found it!') but 'That's funny...’
|
|
|
|
|
Suppose that I have an interface named IMyInterface and two classes both of which implement this interface, say ClassA and ClassB. Now I need a collection of these classes. So I have to have an array of IMyInterface(I don't want to use any thing like ArrayList or something). Now my problem is how to initiate this kind of array so that it would be able to hold both ClassA and ClassB? For example think I need an array of size 10:
private IMyInterface[] _interfaces;
_interfaces = new (what?)[10]
ps: What is the best way of having such a dynamic array? should I have a temp array and use .CopyTo method and re-new the old array?
Don't forget, that's Persian Gulf not Arabian gulf!
Murphy:Click Here![^]
Events and Delegates simplified:Click Here![^]
I'm thirsty like sun, more landless than wind...
|
|
|
|
|
_interfaces = new IMyInterface[10];<br />
|
|
|
|
|
You are right about interfaces = new IMyInterface[10]; , but if I recall it correctly, the array is set to a size of 10, but contains NO values, not even null .
- Daniël Pelsmaeker
An egoist is someone who doesn't think about me.
|
|
|
|
|
Interfaces are reference types, hence the array is filled with null . Try to call methods on any of those array elements (before initialization) and you'll get a NullReferenceException or ArgumentNullException depending on how you use the array elements. Step through in a debugger and you'll find that they're null as well. Structs and other value types - on the other hand, do not require instantiation in an array and their members will be the default values for whatever Types they are (reference types will still be null since you can't provide a default constructor with structs, but an Int32 will be 0, etc.).
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Each element of your array will be set to null. There is no such thing as NO value. Every reference type is initialized to null.
If you want dynamic array, you can use ArrayList() and just cast when you get elements:
ArrayList list = new ArrayList();
list.add(elem);
IMyInterface iface = (IMyInterface)list[i];
|
|
|
|
|
hi,
i have a form(frmQueue) where i've put a datagrid control with only one column on it. when the user clicks on the "Update" button it gets whatever info from the datasource and displays it in the datagrid. the user can then select a particular column and click a "Get Details" button, when the button is clicked, i want the details to be displayed in textboxes in another form(frmTransaction). my question is how do i code the Get Details button. im new to this language...so an example would really get me working.
thx in advance
When a man's wife starts to understand him, she usually stops listening to him.
|
|
|
|
|
Change the constructor of your second form and add a srting parameter to it. And when you create it in your button event handler, pass he column name there and proccess it in second form.
Mazy
"A bank is a place that will lend you money if you can prove that you don't need it." - Bob Hope
|
|
|
|
|
Hi Mazy,
When u said to pass the column name, did u mean the column name from the datasource or the datagrid?. i just wanna confirm.
|
|
|
|
|
DataSource
Mazy
"A bank is a place that will lend you money if you can prove that you don't need it." - Bob Hope
|
|
|
|
|
OK. I'm workin on this program and theres this one part of it that loads all of the names of the files in a certain folder, and then adds them to a context menu. Now here is where i run into my problem. I want to make it so that you can click on the menu item in the context menu (which was loaded when the program opened) and have it open its corresponding file in the folder it was loaded from.
Here is the code i used to load the files:
string[] files = Directory.GetFiles(@"docs\");<br />
int fnumber = files.Length;<br />
<br />
for(int cNumber = 0; cNumber != fnumber; cNumber++)<br />
{<br />
string fileName = Path.GetFileNameWithoutExtension(files[cNumber]);<br />
MenuItem menuItem = new MenuItem();<br />
menuItem.Text = fileName;<br />
contextMenu.MenuItems.Add(0, menuItem);<br />
}
Now all i need is an event handler for each menu item that can open the right file. If you know how to do this, then please tell me. Thanks.
By BigBlob202
check out my site - Dinco Inc. - I just started it so theres not much on it.
|
|
|
|
|
You can simply attach an event handler to your MenuItem object.
MenuItem mi = new MenuItem();
mi.Click += new System.EventHandler(this.MenuClick);
...
private void MenuClick(object sender, System.EventArgs e)
{
MenuItem mi = sender as MenuItem;
if(mi != null)
{
}
}
- Nick Parker My Blog
|
|
|
|
|
OK ive put that in the code but now i have no idea how to tell the event handler which menu item was clicked. Thanks so much!!
By BigBlob202
check out my site - Dinco Inc. - I just started it so theres not much on it.
|
|
|
|
|
It appeared in your case you were assigning the Text property of the MenuItem to be a filename. Once you cast the sender as a MenuItem and confirm the cast didn't fail (by checking for null), you can then check the MenuItem (i.e.; mi in my example) for it's Text property. Try throwing a MessageBox.Show(mi.Text); after your check for null to see what I am talking about. This will tell you exactly what was clicked.
- Nick Parker My Blog
|
|
|
|
|
Thank you so much. It worked perfectly!! If you wanna see the program i was making then go to my site - Dinco Inc. - The program is a miniware program called Desktop Saver. It should be up at least by the middle of next week. Thanks Again!
By BigBlob202
|
|
|
|
|
Hello,
My program needs to access a network share and either copy files from the share or else just execute a program. First I have the client check if it can see the share:
if(Directory.Exists("\\\\server\\share") {
// do whatever
}
else {
// couldn't see share
// provided the share is online
// I assume the client does not have proper permission
// basically I want to "net use" here.
}
Is there a function that does this? Or do i need to start a "net use" process? What is the preferred method of gaining access to a remote share through C#?
Thanks,
Ian
|
|
|
|
|
just use it like a normal file resource
|
|
|
|