|
I am trying to migrate an old VB6 app to .NET (Windows forms using C#). I used ADO for data access and none of the controls are bound to data sources. The only unusual thing I did was using an old VS6 ActiveX control (MSFlexGrid). I found there is a noticeable difference in performance. The C# application takes about 5 times as much time to do things.
Am I doing something wrong, or it is it the Common Language Runtime that's slowing things down ?
|
|
|
|
|
I m trying to use Method where arguments are pass by reference of Managed C++ Code in C#.But the error is coming like:
The best overloaded method match for 'ManagedDLL.Class1.BoxPropertiesMG(double, double, double, double*, double*)' has some invalid arguments
cannot convert from 'ref double' to 'double*'
Source Code for this is given below:
//Managed C++ Dll Code:
public __gc class Class1
{
public:
void BoxPropertiesMG(double L, double H,
double W, double& A, double& V)
{
BoxProperties(L, H,W, A, V);
}
};
C# Code:
class Class1
{
static void Main(string[] args)
{
ManagedDLL.Class1 ob = new ManagedDLL.Class1();
double L=2.0, W=3.0, H=4.0;
double A, V;
Console.WriteLine(ob.BoxPropertiesMG(L,H,W,ref A, ref V));
}
}
Can Someone help me to solve this problem ?
|
|
|
|
|
Don't know for sure if this will help, as I never worked on C++ working with C#, but I was looking into __gc* pointers in the the .NET docs ... I wonder if that would help you.
Good luck,
Jerry
|
|
|
|
|
Hi!
I need to draw 1000-2000 lines from .net about 3 times/sec. Graphics.Drawlines is too slow, directx is not good because it requires a relativly modern graphics card. Would GDI with pinvoke be fast enough? Or do you know a fast 3rd party graphics library?
thanx
|
|
|
|
|
I don't see why you can't draw 1000-2000 lines 3 times/sec. That gives you (if we take the median) 500 lines per second, which doesn't seem a very high number.
Attached is code for custom control that draws random 5000 lines and it takes about 72 ms to draw them on my system at 640x480 size and 200 ms at 1280x1024.
For 500 lines the accuracy of the timer is too low as i get 0 ms.
<br />
using System;<br />
using System.Windows.Forms;<br />
using System.Drawing;<br />
<br />
namespace LineTest<br />
{<br />
struct Line<br />
{<br />
public int x1, y1, x2, y2; <br />
public Color c;<br />
}<br />
<br />
public class RandomLinesControl : Control<br />
{<br />
int numLines;<br />
Line[] lines;<br />
<br />
public RandomLinesControl()<br />
{<br />
SetStyle(ControlStyles.AllPaintingInWmPaint<br />
| ControlStyles.DoubleBuffer<br />
| ControlStyles.UserPaint, true);<br />
<br />
NumLines = 5000;<br />
}<br />
<br />
protected override void OnResize(EventArgs e)<br />
{<br />
base.OnResize (e);<br />
<br />
CreateLines();<br />
}<br />
<br />
<br />
public int NumLines<br />
{<br />
get { return numLines; }<br />
set <br />
{<br />
numLines = value;<br />
CreateLines();<br />
}<br />
}<br />
<br />
void CreateLines()<br />
{<br />
Random rand = new Random();<br />
<br />
lines = new Line[numLines];<br />
for (int i=0; i<numLines; i++)<br />
{<br />
Line line = new Line();<br />
line.x1 = rand.Next(3, Width > 6 ? Width-3 : 6);<br />
line.x2 = rand.Next(3, Width > 6 ? Width-3 : 6);<br />
line.y1 = rand.Next(15, Height > 20 ? Height-3 : 20);<br />
line.y2 = rand.Next(15, Height > 20 ? Height-3 : 20);<br />
line.c = Color.FromArgb(rand.Next(255), rand.Next(255), rand.Next(255));<br />
<br />
lines[i] = line;<br />
}<br />
<br />
Invalidate();<br />
}<br />
<br />
protected override void OnPaint(PaintEventArgs e)<br />
{<br />
int start_t = System.Environment.TickCount;<br />
<br />
Graphics g = e.Graphics;<br />
g.Clear(this.BackColor);<br />
Pen pen = new Pen(this.ForeColor);<br />
<br />
for (int i=0; i<lines.Length; i++)<br />
{<br />
Line line = lines[i];<br />
pen.Color = line.c;<br />
g.DrawLine(pen, line.x1, line.y1, line.x2, line.y2);<br />
}<br />
<br />
int end_t = System.Environment.TickCount;<br />
g.DrawString("Drawn " + numLines + " lines in " + (end_t-start_t) + " ms", Font, Brushes.Black, 1, 1);<br />
<br />
}<br />
<br />
}<br />
}<br />
<br />
|
|
|
|
|
>>1000-2000 lines 3 times/sec,(if we take the median) 500 lines per second, >>which doesn't seem a very high number.
no, you misunderstood me, that means (if we take the median) 4500 lines per second
on the other hand, it is no problem on my computer. the problem is, that this program will be run on older computers with no more than (and that's the best case) 128MB Ram, win98, P2 300Mhz computers.
anyway, i tried DrawLines out, if it had'nt been too slow, i wouldn't have posted this thread.
|
|
|
|
|
The DrawLines function you're calling is a wrapper for GDI+ functions that are being P/Invoked already. Most of the .NET FCL are wrappers around Windows API calls.
You mentioned that 'you need a relatively modern graphics cards'. You don't need a high powered graphics card to support DirectX. DirectX will still work so long as you have updated drivers for your video card. I take it you have something that doesn't offer very good support for 2D or 3D? What card do you have?
This would most definately affect your drawing speed, no matter what library you use.
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
The problem is, that the program will be run on *old* computers with old PCI graphic cards, I'm not even sure that there are DX8 drivers for them, and managedDX uses DX9 interfaces!
my comp is pretty new, the problem is not here at home
|
|
|
|
|
Have you through about drawing on to a bitmap and then when completed sending that to the screen?
About 8 years ago I was faced with a similar problem in C++/MFC and that speeded things up. It would most likely be fair to say that with .NET the same priniple applies as the .NET classes wrap the GDI calls anyway.
"You can have everything in life you want if you will just help enough other people get what they want." --Zig Ziglar
The Second EuroCPian Event will be in Brussels on the 4th of September
Can't manage to P/Invoke that Win32 API in .NET? Why not do interop the wiki way!
|
|
|
|
|
>>Have you through about...
yes
this is what im doing now:
1-create a bitmap
2-call graphics.fromimage on it
3-draw on the bitmap
4-flip the bitmap to tha picturebox background
the graphics.drawlines in step3 is too slow
|
|
|
|
|
Are any of the lines more than one pixel thick? I recall from a few years ago encountering a slowing of the drawing if the width of the line was more than a pixel. Could this be the problem?
Other than that there isn't much more that I can suggest that would be to do with the GDI.
Other things to look at are how you are aquiring the data that defines the lines you are drawing? Is the format optimal? Are you doing conversions on the data while drawing it? Are you accessing more than just the data for drawing? Are you iterating through the data efficiently?
Does any of this help?
"You can have everything in life you want if you will just help enough other people get what they want." --Zig Ziglar
The Second EuroCPian Event will be in Brussels on the 4th of September
Can't manage to P/Invoke that Win32 API in .NET? Why not do interop the wiki way!
|
|
|
|
|
the lines are 2pixels thick.
the line-data i get from a function needs to be processed so it can be passed to Grpahics.DrawLines. DrawLines itself takes an array of points, where each point defines the end of a line, and the start of the next line (i get joint lines). there isn't much left to optimize. with a little bit more optimiziation i could maybe get rid of a few lines, in cases where 2 or more lines form a straight line, but i don't think it would help much, since this case is really rare(rare because im drawing curves). the optimalization would take longer than the time i win on it.
however, one thing came in to my mind: what about opengl?
i haven't used it yet, it's a totally new thing to me. as long as i now, opengl supports so called extensions (not like DX). is the number of extensions the only difference between ogl versions? if so, that could mean that i could use ogl on older graphic cards too, since i don't need any modern capabilities.
is that possible?
|
|
|
|
|
Hi Friends,
I am a VC++ programmer. I have started learning c#.net. I want to program for Hand help devices. I would like to know which hand held device I need to buy to support .net frame work. There are lots of types in hand help like Palm top, Mobile device. I am not able to understand the difference between each of the devices.
ANy help please!!!!!!!!!
bbye
|
|
|
|
|
any hand held pc that is using CE 4.0 and that supports .net CF
|
|
|
|
|
So far as I know, the .Net Compact Framework development only supports PocketPC/WindowsCE devices.
Before you buy:
To my frustration, the PDA must have it's own network adapter to connect to the network. The dock is just for Activesync-style conduits (mail, notes, Avantgo, etc).
The Viewsonic I've been using for the last year is useless for web or server syncing without a plug-in card ($$). I am now waiting for the boss to order an Axim with 802.11b.
Studio .Net comes with a PocketPC emulator for testing with if you don't have a real one. It works well, but slower. Again, it can't do web or server connections. I did manage to get it to file-share to our server.
"For all of our languages, we cannot communicate" - Christy Moore, Natives
|
|
|
|
|
Hi Richard
I'm not overly familiar with all of the options re PocketPC devices, as I've just started developing.
I'm developing a C# app to run on a Compaq iPAQ PocketPC. It has a basic cradle with a USB connection. Within MS ActiveSync there is an option to allow 'pass through' connection. This means I can happily HTTP and TCP when the device is in the cradle. I don't have any other hardware for the device.
I thought this may be of help in case there has been a new ActiveSync released with this functionality.
|
|
|
|
|
I am using Activesync v3.7 .
If you wouldn't mind a few questions:
- do you have a network card installed (or SD type)
- are you using a static IP
- Are you using Work or Internet config
I have nothing in either config for numbers.
Canada has 6 zones, none of which are erogenous.
|
|
|
|
|
I'm running ActiveySync v3.7.1 Build 4034 (Not sure what the differences are) on Windows CE 3.0 on a Compaq iPAQ H3800.
- I don't believe there are any network cards in it. There are no expansion cards in it and in my Asset Viewer it doesn't mention anything about network devices.
- I did use a static IP, just a std 192.168.1.x with the settings for my DNS and gateway the same as other machines on the network.
- Wouldn't really know for sure which config I'm running, but I have these settings in Settings, Connections.
... connect to The Internet using Internet Settings
... connect to Work using Work Settings
My network card connects to The Internet
If I try to modify any of the Connections settings, they're empty.
I do have 3 Network Adapters defined in Settings, Network Adapters which is where I setup the details of my network.
AsyncMac1 NDISWAN Adapter
NE2000 Compatible Ethernet Driver
PPTP1 NDISWAN Adapter
I assumed each of these were merely drivers, and didn't specifically relate to a hardware device, as there was nothing showing in the Asset Viewer.
HTH
Thanks
Andre
|
|
|
|
|
Thank you very much.
I have the same in my adapters list. I think they are just the drivers for those adapters.
I will try a static IP. That's the only thing I haven't done yet (we use DHCP here).
If that doesn't work, I guess Viewsonic is different than your iPAQ.
Canada has 6 zones, none of which are erogenous.
|
|
|
|
|
i am new to programming, including visual basic .net. i am running windows xp pro and only have microsofts. visual basic .net standard ed. I am having problems getting everything to run correctly so that i can run programs correctly. Here's what i would like to do; basically start over again from scratch. I have installed the following items; II5, the front page extentions, net framework sdk, msde 2000, microsoft sql and of course the VB .NET standard ed. i can't get the net framework redistributalbe version 1.1 to install for some reason. i also think i used the wrong instancename when i installed MSDE. Well you get my point. What i would like to do is uninstall everything (except II5 and the front page extensions) and start over again. Can i safely remove everything, (except II5 and the frontpage extensions) and then try to reinstall everything correctly? And last but not least, can anyone suggest a web site or an article on how to go about installing everything correctly and in the right order. any help would be appreciated. down the road, i do plan on getting visual studio .net but for now i will have to stick with just the visual basic .net standard ed.
thanks.
Dave Pursey.
|
|
|
|
|
You have MSDE and SQL Server? Pick one...
You can uninstall all this stuff, but there is no guarantee that the uninstalls will COMPLETELY uninstall the application. The installation order should be:
Windows XP
Internet Information Server 5
Front Page Extensions
XP Service Pack 1
SQL Server OR the MSDE
Service Pack 3a for SQL Server/MSDE
Then Visual Studio .NET Standard Edition, which will automatically install:
Windows Component Update pack (if needed)
MDAC 2.7 (if needed)
Front Page Server Extensions Update (if needed)
.NET Framework SDK
Any additional SDK's that are picked
Visual Studio .NET
MSDN Documentation (can't remeber if it comes with the Standard Edtion, though)
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
I use MDI to design my Tablet PC SDK project,
In my project, I need to read a list of pictures and draw on it,
every picture I use a MDIChild Form with an inkPicture control on it to show,
because my Parent Form needs to change the picture of inkPicture,
so I declare
public Microsoft.Ink.InkPicture inkPicture;
but I have a question:
Now I have to change the color of pen in the inkPicture,
if I am in a child Form,I just need to write:
this.inkPicture.DefaultDrawingAttributes.Color = Color.Red;
but if I want to change "every" child form's color in my parent form,
How can I do this...??
I want to use for loop,
but MdiChildren[i] doesn't seem to have inkPicture control...
Can anyone tell me how parent form can use child form's control...??
|
|
|
|
|
I'm trying to create a Custom Security Token in WSE 2.0 that does not use an X509 certificate. I would rather use the Rijndael symetric encryption alogrithm where I generate the key in the client and then include the IV and salt factor somewhere in the SOAP message so they can be used by the server to decrypt the message.
Has anyone successfully implemented something like this or even an example of using a custom security token in WSE 2.0 that doesn't use X509 certs?
|
|
|
|
|
I'm having a problem with ListView. I've created an ImageList with two jpegs in it and assigned it to ListView's LargeIconsList. The images are displaying correctly while working in VS.NET but not while running the app. Any ideas what could be wrong?
|
|
|
|
|
As you know the images attached to your listview are also objects maintained by Image class. For this very reason the image is not automatically embed to you listview object nor to your image class. You keep the path intact the time you call it in your distributed apps by tracking the path of the source image. To avoid such error make sure your passing the correct image path(string value)
|
|
|
|
|