473,602 Members | 2,811 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

What .NET classes are SLOW vs. API?

As a fairly new .NET coder, I would greatly appreciate some comments on
any .NET classes that are known to be notoriously slow by comparison to
direct API calls.

I've already had a bad experience with System.IO.Direc toryInfo. My
requirements were to recursively scan a folder, recording all
filenames/dates/sizes/attribs. The target folder contained 88,000
files and 5,000 subfolders.

I originally used System.IO.Direc toryInfo and found it incredibly slow,
so I tried the same thing with API FindFirst/FindNext. The API version
was *eighteen* times faster when run from the IDE, and *five* times
faster when running the Release .exe. Tests were run multiple times to
make sure the directories were cached, thus disk access times were not
a factor.

This was unacceptible for my application, so I'm writing a nice class
for directory listings using the API which kicks
System.IO.Direc toryInfo's arse.

However, I would prefer to avoid needless
write/wtf/rewrite/benchmark/fix cycles in the future if the kindness of
strangers can steer me clear. :) I'm only interested in classes that
are likely to be called rapidly and repeatedly, and are much slower
than API equivalents; and so are likely to have a large impact on
application performance.

Oct 11 '06 #1
14 2270
I think that you're friggin whacked kid.

maybe you're trying to store 88,000 items in an array?

give us more information; i have a similar project that gave the exact
opposite results... .NET enumerating of folders / files was quite a
bit faster than anything i could do in vb6
-Aaron
te******@hotmai l.com wrote:
As a fairly new .NET coder, I would greatly appreciate some comments on
any .NET classes that are known to be notoriously slow by comparison to
direct API calls.

I've already had a bad experience with System.IO.Direc toryInfo. My
requirements were to recursively scan a folder, recording all
filenames/dates/sizes/attribs. The target folder contained 88,000
files and 5,000 subfolders.

I originally used System.IO.Direc toryInfo and found it incredibly slow,
so I tried the same thing with API FindFirst/FindNext. The API version
was *eighteen* times faster when run from the IDE, and *five* times
faster when running the Release .exe. Tests were run multiple times to
make sure the directories were cached, thus disk access times were not
a factor.

This was unacceptible for my application, so I'm writing a nice class
for directory listings using the API which kicks
System.IO.Direc toryInfo's arse.

However, I would prefer to avoid needless
write/wtf/rewrite/benchmark/fix cycles in the future if the kindness of
strangers can steer me clear. :) I'm only interested in classes that
are likely to be called rapidly and repeatedly, and are much slower
than API equivalents; and so are likely to have a large impact on
application performance.
Oct 11 '06 #2
aa*********@gma il.com wrote:
I think that you're friggin whacked kid.
Erm, that's not exactly the kind of useful response I was hoping for.
But let's roll with it, while I wait for anyone else to answer my
question.
maybe you're trying to store 88,000 items in an array?
Erm, no. That's rather silly.
give us more information; i have a similar project that gave the exact
opposite results... .NET enumerating of folders / files was quite a
bit faster than anything i could do in vb6
VB6 wasn't so great in this department either. That's why I learned to
use the API in the first place.

As currently configured, the test program recursively scans the entire
C: drive, counting files and dirs. It also grabs the size, attribs,
and all three timestamps of each file/dir it encounters and stores them
in a structure which could be used for something productive, but in
this case is promptly discarded. I do it only to make sure the
information is actually read. Two methods are used, the
System.IO.Direc toryInfo, and API calls. I made sure as much as
possible is similar in the two versions, so that the only substantial
time difference is in the .NET/API call.

I also *disregard* the first run, as it suffers a penalty - the
directory info is actually being read from the disk. After that, it's
cached; assuming your memory is big enough and your drive small enough.

By the way, my C: drive has 240,295 files in 16,784 folders. I ran the
test both from the .NET 2.0 IDE and from the Release .exe, and here are
the results:

System.IO.Direc toryInfo, run from IDE: 80,734 ms (milliseconds)
System.IO.Direc toryInfo, Release .exe: 43,671 ms
Windows API, run from IDE: 5,812 ms
Windows API, Release .exe: 4,047 ms

These results are even worse than my initial ones. But at this point,
it doesn't really matter to me *how* ridiculously slow it is - it's
still ridiculously slow. Way more overhead than expected for using the
..NET method (which just calls the API anyway), and unacceptable for a
number of uses I have planned.

I invite you to try this yourself, get your own results, and draw your
own conclusions. And let me know what they are.

Create a new project, add two buttons to a form, delete existing code,
and paste this in (watch out for wordwrap):

-----

Imports System.Runtime. InteropServices

Public Class Form1

Private Const INVALID_HANDLE_ VALUE As Integer = -1
Private Const MAX_PATH As Integer = 260
Structure tFILETIME
Dim dwLowDateTime As Int32
Dim dwHighDateTime As Int32
End Structure
<StructLayout(L ayoutKind.Seque ntial, CharSet:=CharSe t.Ansi)_
Private Structure WIN32_FIND_DATA
Public dwFileAttribute s As Integer
Public ftCreationTime As tFILETIME
Public ftLastAccessTim e As tFILETIME
Public ftLastWriteTime As tFILETIME
Public nFileSizeHigh As UInt32
Public nFileSizeLow As UInt32
Public dwReserved0 As Int32
Public dwReserved1 As Int32
<MarshalAs(Unma nagedType.ByVal TStr, SizeConst:=MAX_ PATH)_
Public cFileName As String
<MarshalAs(Unma nagedType.ByVal TStr, SizeConst:=14)_
Public cAlternateFileN ame As String
End Structure
Private Declare Function FindFirstFile Lib "kernel32" Alias
"FindFirstFileA " (ByVal lpFileName As String, ByRef lpFindFileData As
WIN32_FIND_DATA ) As Int32
Private Declare Function FindNextFile Lib "kernel32" Alias
"FindNextFi leA" (ByVal hFindFile As Int32, ByRef lpFindFileData As
WIN32_FIND_DATA ) As Int32
Private Declare Function FindClose Lib "kernel32" (ByVal hFindFile As
Int32) As Int32

Public Structure DirItem
Dim Name As String
Dim Size As Long
Dim Attribs As System.IO.FileA ttributes
Dim DateAccessed As Date
Dim DateCreated As Date
Dim DateModified As Date
End Structure

Dim Files, Dirs As Integer

Private Sub Button1_Click(B yVal sender As System.Object, ByVal e As
System.EventArg s) Handles Button1.Click
Test(1)
End Sub

Private Sub Button2_Click(B yVal sender As System.Object, ByVal e As
System.EventArg s) Handles Button2.Click
Test(2)
End Sub

Sub Test(ByVal Method As Integer)
Dim StartTick As Integer = My.Computer.Clo ck.TickCount
Files = 0
Dirs = 0
Select Case Method
Case 1 : RecurseDirsNet( "c:")
Case 2 : RecurseDirsAPI( "c:")
End Select
MsgBox("Files = " & Files & vbCrLf & "Dirs = " & Dirs & vbCrLf &
"Time (ms)= " & (My.Computer.Cl ock.TickCount - StartTick))
End Sub

Public Sub RecurseDirsAPI( ByVal Path As String)
Dim s1 As String
Dim WFD As New WIN32_FIND_DATA
Dim x As DirItem
Dim hDir As Integer = FindFirstFile(P ath & "\*.*", WFD)
If hDir = INVALID_HANDLE_ VALUE Then Stop
Do
x = New DirItem
s1 = StripNull(WFD.c FileName)
If s1 <"." And s1 <".." Then
With x
.Name = s1
.Size = WFD.nFileSizeLo w + WFD.nFileSizeHi gh * 4294967296
.Attribs = WFD.dwFileAttri butes
.DateAccessed = FileTimeConvert (WFD.ftLastAcce ssTime)
.DateCreated = FileTimeConvert (WFD.ftCreation Time)
.DateModified = FileTimeConvert (WFD.ftLastWrit eTime)
If .Attribs And IO.FileAttribut es.Directory Then
Dirs += 1
RecurseDirsAPI( Path & "\" & .Name)
Else
Files += 1
End If
End With
End If
If FindNextFile(hD ir, WFD) = 0 Then Exit Do
Loop
FindClose(hDir)
End Sub

Public Sub RecurseDirsNet( ByVal Path As String)
Dim x As DirItem
Dim DI As New System.IO.Direc toryInfo(Path & "\")
For Each File As System.IO.FileI nfo In DI.GetFiles
x = New DirItem
With x
.Name = File.Name
.Attribs = File.Attributes
.DateAccessed = File.LastAccess Time
.DateCreated = File.CreationTi me
.DateModified = File.LastWriteT ime
End With
Files += 1
Next
For Each Dir As System.IO.Direc toryInfo In DI.GetDirectori es
x = New DirItem
With x
.Name = Dir.Name
.Attribs = Dir.Attributes
.DateAccessed = Dir.LastAccessT ime
.DateCreated = Dir.CreationTim e
.DateModified = Dir.LastWriteTi me
Dirs += 1
RecurseDirsNet( Path & "\" & .Name)
End With
Next
End Sub

Function StripNull(ByVal X As String) As String
Dim l1 As Long : l1 = InStr(1, X, Chr(0), vbBinaryCompare )
If l1 = 0 Then
StripNull = X
Else
StripNull = Strings.Left(X, l1 - 1)
End If
End Function

Private Function FileTimeConvert (ByVal udtFileTime As tFILETIME) As
Date
FileTimeConvert =
System.DateTime .FromFileTime(u dtFileTime.dwLo wDateTime +
udtFileTime.dwH ighDateTime * 4294967296)
End Function

End Class

Oct 12 '06 #3
what.. you can't call an API from vb6? sorry i implied that

i'll post some of my similiar code soon ok

-aaron
te******@hotmai l.com wrote:
aa*********@gma il.com wrote:
I think that you're friggin whacked kid.

Erm, that's not exactly the kind of useful response I was hoping for.
But let's roll with it, while I wait for anyone else to answer my
question.
maybe you're trying to store 88,000 items in an array?

Erm, no. That's rather silly.
give us more information; i have a similar project that gave the exact
opposite results... .NET enumerating of folders / files was quite a
bit faster than anything i could do in vb6

VB6 wasn't so great in this department either. That's why I learned to
use the API in the first place.

As currently configured, the test program recursively scans the entire
C: drive, counting files and dirs. It also grabs the size, attribs,
and all three timestamps of each file/dir it encounters and stores them
in a structure which could be used for something productive, but in
this case is promptly discarded. I do it only to make sure the
information is actually read. Two methods are used, the
System.IO.Direc toryInfo, and API calls. I made sure as much as
possible is similar in the two versions, so that the only substantial
time difference is in the .NET/API call.

I also *disregard* the first run, as it suffers a penalty - the
directory info is actually being read from the disk. After that, it's
cached; assuming your memory is big enough and your drive small enough.

By the way, my C: drive has 240,295 files in 16,784 folders. I ran the
test both from the .NET 2.0 IDE and from the Release .exe, and here are
the results:

System.IO.Direc toryInfo, run from IDE: 80,734 ms (milliseconds)
System.IO.Direc toryInfo, Release .exe: 43,671 ms
Windows API, run from IDE: 5,812 ms
Windows API, Release .exe: 4,047 ms

These results are even worse than my initial ones. But at this point,
it doesn't really matter to me *how* ridiculously slow it is - it's
still ridiculously slow. Way more overhead than expected for using the
.NET method (which just calls the API anyway), and unacceptable for a
number of uses I have planned.

I invite you to try this yourself, get your own results, and draw your
own conclusions. And let me know what they are.

Create a new project, add two buttons to a form, delete existing code,
and paste this in (watch out for wordwrap):

-----

Imports System.Runtime. InteropServices

Public Class Form1

Private Const INVALID_HANDLE_ VALUE As Integer = -1
Private Const MAX_PATH As Integer = 260
Structure tFILETIME
Dim dwLowDateTime As Int32
Dim dwHighDateTime As Int32
End Structure
<StructLayout(L ayoutKind.Seque ntial, CharSet:=CharSe t.Ansi)_
Private Structure WIN32_FIND_DATA
Public dwFileAttribute s As Integer
Public ftCreationTime As tFILETIME
Public ftLastAccessTim e As tFILETIME
Public ftLastWriteTime As tFILETIME
Public nFileSizeHigh As UInt32
Public nFileSizeLow As UInt32
Public dwReserved0 As Int32
Public dwReserved1 As Int32
<MarshalAs(Unma nagedType.ByVal TStr, SizeConst:=MAX_ PATH)_
Public cFileName As String
<MarshalAs(Unma nagedType.ByVal TStr, SizeConst:=14)_
Public cAlternateFileN ame As String
End Structure
Private Declare Function FindFirstFile Lib "kernel32" Alias
"FindFirstFileA " (ByVal lpFileName As String, ByRef lpFindFileData As
WIN32_FIND_DATA ) As Int32
Private Declare Function FindNextFile Lib "kernel32" Alias
"FindNextFi leA" (ByVal hFindFile As Int32, ByRef lpFindFileData As
WIN32_FIND_DATA ) As Int32
Private Declare Function FindClose Lib "kernel32" (ByVal hFindFile As
Int32) As Int32

Public Structure DirItem
Dim Name As String
Dim Size As Long
Dim Attribs As System.IO.FileA ttributes
Dim DateAccessed As Date
Dim DateCreated As Date
Dim DateModified As Date
End Structure

Dim Files, Dirs As Integer

Private Sub Button1_Click(B yVal sender As System.Object, ByVal e As
System.EventArg s) Handles Button1.Click
Test(1)
End Sub

Private Sub Button2_Click(B yVal sender As System.Object, ByVal e As
System.EventArg s) Handles Button2.Click
Test(2)
End Sub

Sub Test(ByVal Method As Integer)
Dim StartTick As Integer = My.Computer.Clo ck.TickCount
Files = 0
Dirs = 0
Select Case Method
Case 1 : RecurseDirsNet( "c:")
Case 2 : RecurseDirsAPI( "c:")
End Select
MsgBox("Files = " & Files & vbCrLf & "Dirs = " & Dirs & vbCrLf &
"Time (ms)= " & (My.Computer.Cl ock.TickCount - StartTick))
End Sub

Public Sub RecurseDirsAPI( ByVal Path As String)
Dim s1 As String
Dim WFD As New WIN32_FIND_DATA
Dim x As DirItem
Dim hDir As Integer = FindFirstFile(P ath & "\*.*", WFD)
If hDir = INVALID_HANDLE_ VALUE Then Stop
Do
x = New DirItem
s1 = StripNull(WFD.c FileName)
If s1 <"." And s1 <".." Then
With x
.Name = s1
.Size = WFD.nFileSizeLo w + WFD.nFileSizeHi gh * 4294967296
.Attribs = WFD.dwFileAttri butes
.DateAccessed = FileTimeConvert (WFD.ftLastAcce ssTime)
.DateCreated = FileTimeConvert (WFD.ftCreation Time)
.DateModified = FileTimeConvert (WFD.ftLastWrit eTime)
If .Attribs And IO.FileAttribut es.Directory Then
Dirs += 1
RecurseDirsAPI( Path & "\" & .Name)
Else
Files += 1
End If
End With
End If
If FindNextFile(hD ir, WFD) = 0 Then Exit Do
Loop
FindClose(hDir)
End Sub

Public Sub RecurseDirsNet( ByVal Path As String)
Dim x As DirItem
Dim DI As New System.IO.Direc toryInfo(Path & "\")
For Each File As System.IO.FileI nfo In DI.GetFiles
x = New DirItem
With x
.Name = File.Name
.Attribs = File.Attributes
.DateAccessed = File.LastAccess Time
.DateCreated = File.CreationTi me
.DateModified = File.LastWriteT ime
End With
Files += 1
Next
For Each Dir As System.IO.Direc toryInfo In DI.GetDirectori es
x = New DirItem
With x
.Name = Dir.Name
.Attribs = Dir.Attributes
.DateAccessed = Dir.LastAccessT ime
.DateCreated = Dir.CreationTim e
.DateModified = Dir.LastWriteTi me
Dirs += 1
RecurseDirsNet( Path & "\" & .Name)
End With
Next
End Sub

Function StripNull(ByVal X As String) As String
Dim l1 As Long : l1 = InStr(1, X, Chr(0), vbBinaryCompare )
If l1 = 0 Then
StripNull = X
Else
StripNull = Strings.Left(X, l1 - 1)
End If
End Function

Private Function FileTimeConvert (ByVal udtFileTime As tFILETIME) As
Date
FileTimeConvert =
System.DateTime .FromFileTime(u dtFileTime.dwLo wDateTime +
udtFileTime.dwH ighDateTime * 4294967296)
End Function

End Class
Oct 12 '06 #4
In article <11************ **********@i42g 2000cwa.googleg roups.com>,
te******@hotmai l.com says...
However, I would prefer to avoid needless
write/wtf/rewrite/benchmark/fix cycles in the future if the kindness of
strangers can steer me clear. :) I'm only interested in classes that
are likely to be called rapidly and repeatedly, and are much slower
than API equivalents; and so are likely to have a large impact on
application performance.
I think that's an "it depends" question. I've used the DirectoryInfo
class to recurse into a directory and it worked quite fast. However, the
directory didn't contain 88,000 files and 5,000 subdirectories. If
you're going to be processing that kind of a data set and want it to run
as fast as possible, you're probably going to need to use unmanaged
code.

I've done some custom drawing with .NET using System.Drawing and the
Grpahics object. It was pretty easy and the performance for the
application was very acceptable. But -- if I wanted to write the next
'Battlefield 2142', I wouldn't use the System.Drawing namespace... :)

--
Patrick Steele
http://weblogs.asp.net/psteele
Oct 12 '06 #5
Patrick Steele wrote:
I think that's an "it depends" question. I've used the DirectoryInfo
class to recurse into a directory and it worked quite fast. However, the
directory didn't contain 88,000 files and 5,000 subdirectories. If
you're going to be processing that kind of a data set and want it to run
as fast as possible, you're probably going to need to use unmanaged
code.

I've done some custom drawing with .NET using System.Drawing and the
Grpahics object. It was pretty easy and the performance for the
application was very acceptable. But -- if I wanted to write the next
'Battlefield 2142', I wouldn't use the System.Drawing namespace... :)
True. :) For the next "Battlefiel d 2142", even 25% slower drawing
would be a killer. And my need for massive directory scans is also
rather unusual.

I guess what I'm getting at, is that I expect *all* managed code to be
somewhat slower than unmanaged code. But when something is 5-10 times
slower, especially when it's essentially just a wrapper around an API
call, that suggests a flaw in the underlying code. And that's the kind
of thing I'd rather like to know about in advance.

Another prime example I've found is the speed of DataGridView being
much worse than the older DataGrid. People have commented that they
can actually see it repainting individual rows on high-end systems. I
tried it, and perhaps that's a slight exaggeration, but it is indeed
SLOW. I saw a post on the MS bug forums where a MS Rep actually said
that yes, it *is* a bug, it's calling slow RenderText instead of fast
DrawText (or something like that), and they didn't intend to do that.
However, they're not going to fix it, because someone might have
written extensions to the DataGridView that *rely* on it calling
RenderText, and they don't want to break anyone's code! Fair enough,
but I'm steering clear of DataGridView when possible since I know what
the deal is...

Oct 12 '06 #6
im not positive i agree with you here:
I guess what I'm getting at, is that I expect *all* managed code to be
somewhat slower than unmanaged code.

things like string concatenation for example.

you should give me some sort of ballpark.. I think that I would parse
this many files in a couple 5 minutes or something; but i think that
some of that time was waiting on the database side to log everything..

I had the best luck when I used DOS to recursively list these files and
then I 'bulk insert' the file into the database.

I wish i could have done it in 10 seconds.. I'll post my code later

but seriously-- what kinda ballpark on time are you trying to squeeze
this into?
-aaron

te******@hotmai l.com wrote:
Patrick Steele wrote:
I think that's an "it depends" question. I've used the DirectoryInfo
class to recurse into a directory and it worked quite fast. However, the
directory didn't contain 88,000 files and 5,000 subdirectories. If
you're going to be processing that kind of a data set and want it to run
as fast as possible, you're probably going to need to use unmanaged
code.

I've done some custom drawing with .NET using System.Drawing and the
Grpahics object. It was pretty easy and the performance for the
application was very acceptable. But -- if I wanted to write the next
'Battlefield 2142', I wouldn't use the System.Drawing namespace... :)

True. :) For the next "Battlefiel d 2142", even 25% slower drawing
would be a killer. And my need for massive directory scans is also
rather unusual.

I guess what I'm getting at, is that I expect *all* managed code to be
somewhat slower than unmanaged code. But when something is 5-10 times
slower, especially when it's essentially just a wrapper around an API
call, that suggests a flaw in the underlying code. And that's the kind
of thing I'd rather like to know about in advance.

Another prime example I've found is the speed of DataGridView being
much worse than the older DataGrid. People have commented that they
can actually see it repainting individual rows on high-end systems. I
tried it, and perhaps that's a slight exaggeration, but it is indeed
SLOW. I saw a post on the MS bug forums where a MS Rep actually said
that yes, it *is* a bug, it's calling slow RenderText instead of fast
DrawText (or something like that), and they didn't intend to do that.
However, they're not going to fix it, because someone might have
written extensions to the DataGridView that *rely* on it calling
RenderText, and they don't want to break anyone's code! Fair enough,
but I'm steering clear of DataGridView when possible since I know what
the deal is...
Oct 12 '06 #7
Update and clarification:

..GetFiles appears to retrieve *only* the names, and stores them in the
..FileInfo array it returns. Each call to .FileInfo to get
size/dates/attribs appears to result in a *separate* and time-consuming
call down to the API to get this information.

Compare that to the API call I'm using, which returns
name/size/dates/attribs all at once.

If you only need the names, the speed of the .NET method and API method
are nearly identical. But if you need all the file properties, the API
method I've described is much faster, as I've demonstrated.

This should explain why some people are seeing good results with the
..NET method and I was not, and help you decide if using the API will be
an advantage in your situation.

Oct 14 '06 #8
But don't complain if your dotnet program will not work anymore in future
because there has been an OS change.

Cor

<te******@hotma il.comschreef in bericht
news:11******** **************@ k70g2000cwa.goo glegroups.com.. .
Update and clarification:

.GetFiles appears to retrieve *only* the names, and stores them in the
.FileInfo array it returns. Each call to .FileInfo to get
size/dates/attribs appears to result in a *separate* and time-consuming
call down to the API to get this information.

Compare that to the API call I'm using, which returns
name/size/dates/attribs all at once.

If you only need the names, the speed of the .NET method and API method
are nearly identical. But if you need all the file properties, the API
method I've described is much faster, as I've demonstrated.

This should explain why some people are seeing good results with the
.NET method and I was not, and help you decide if using the API will be
an advantage in your situation.

Oct 15 '06 #9
Since the FindFirstFile/FindNextFile OS calls have only seen changes based
on the size of a machine pointer since Windows 3.1, I suspect that other
than machine pointer size changes, any code will still be valid on 64 and
even 128 bit versions of Windows. The real issue here is that using API
calls should always be encapsulated so that the if there is a change in the
future, it will be easy to find and update the API code. In addition, using
"current" API header files will even eliminate this issue when it comes to
recompiling.
Mike Ober.

"Cor Ligthert [MVP]" <no************ @planet.nlwrote in message
news:uV******** ******@TK2MSFTN GP04.phx.gbl...
But don't complain if your dotnet program will not work anymore in future
because there has been an OS change.

Cor

<te******@hotma il.comschreef in bericht
news:11******** **************@ k70g2000cwa.goo glegroups.com.. .
Update and clarification:

.GetFiles appears to retrieve *only* the names, and stores them in the
.FileInfo array it returns. Each call to .FileInfo to get
size/dates/attribs appears to result in a *separate* and time-consuming
call down to the API to get this information.

Compare that to the API call I'm using, which returns
name/size/dates/attribs all at once.

If you only need the names, the speed of the .NET method and API method
are nearly identical. But if you need all the file properties, the API
method I've described is much faster, as I've demonstrated.

This should explain why some people are seeing good results with the
.NET method and I was not, and help you decide if using the API will be
an advantage in your situation.




Oct 15 '06 #10

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

220
18959
by: Brandon J. Van Every | last post by:
What's better about Ruby than Python? I'm sure there's something. What is it? This is not a troll. I'm language shopping and I want people's answers. I don't know beans about Ruby or have any preconceived ideas about it. I have noticed, however, that every programmer I talk to who's aware of Python is also talking about Ruby. So it seems that Ruby has the potential to compete with and displace Python. I'm curious on what basis it...
54
6539
by: Brandon J. Van Every | last post by:
I'm realizing I didn't frame my question well. What's ***TOTALLY COMPELLING*** about Ruby over Python? What makes you jump up in your chair and scream "Wow! Ruby has *that*? That is SO FRICKIN' COOL!!! ***MAN*** that would save me a buttload of work and make my life sooooo much easier!" As opposed to minor differences of this feature here, that feature there. Variations on style are of no interest to me. I'm coming at this from a...
21
2026
by: PassingBy | last post by:
I recently came across a template site selling cd's and was wondering what the groups opinion is of this? I purchased one of the cd's and the templates are great and Im looking forward to learning some design tips from the contents of the cd.... site: www.toptemplatecd.com Jim
4
2267
by: Vincent | last post by:
Hey, I have a problem to understand the underlaying of clone method. Hope someone can help me out. Let's say, clonedObject = originalObject.clone() (syntax may be wrong, but you know what I mean, I hope ) Why can't I just do this, instead?
13
2173
by: SailFL | last post by:
I have read threads here and there and I have looked at MS but I can not get a clear understanding of what .Net acutally is. I understand that C++ and Vb and other languages are being out a .Net. I get some idea that it still is OOP. I think it has different ways of managing the code. But what is it? Thanks -- SailFL
13
5030
by: Jason Huang | last post by:
Hi, Would someone explain the following coding more detail for me? What's the ( ) for? CurrentText = (TextBox)e.Item.Cells.Controls; Thanks. Jason
173
5650
by: Zytan | last post by:
I've read the docs on this, but one thing was left unclear. It seems as though a Module does not have to be fully qualified. Is this the case? I have source that apparently shows this. Are modules left-over from VB6, and not much used anymore? It seems that it is better to require Imports or use fully qualified names for functions in other classes/modules, but a Module doesn't require this, cluttering the global namespace. It seems...
15
2052
by: jim | last post by:
Maybe I'm missing something, but it doesn't look like Microsoft writes a lot of apps in .Net (although they certainly push it for others). What does MS write using pure .Net? If applications like Symantec's antivirus, NeatReciepts or Franklin Covey's PlanPlus for Windows is any guide, .Net applications are slow and clunky. But, maybe the developers of these apps simply don't know how to write a decent app with .Net.
184
6961
by: jim | last post by:
In a thread about wrapping .Net applications using Thinstall and Xenocode, it was pointed out that there may be better programming languages/IDEs to use for the purpose of creating standalone, single executable apps. My goal is to create desktop applications for use on Windows XP+ OSs that are distributed as single executables that do not require traditional install packages to run. I would like to use a drag and drop UI development...
0
7993
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However, people are often confused as to whether an ONU can Work As a Router. In this blog post, we’ll explore What is ONU, What Is Router, ONU & Router’s main usage, and What is the difference between ONU and Router. Let’s take a closer look ! Part I. Meaning of...
0
8401
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers, it seems that the internal comparison operator "<=>" tries to promote arguments from unsigned to signed. This is as boiled down as I can make it. Here is my compilation command: g++-12 -std=c++20 -Wnarrowing bit_field.cpp Here is the code in...
1
8054
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows Update option using the Control Panel or Settings app; it automatically checks for updates and installs any it finds, whether you like it or not. For most users, this new feature is actually very convenient. If you want to control the update process,...
0
8268
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each protocol has its own unique characteristics and advantages, but as a user who is planning to build a smart home system, I am a bit confused by the choice of these technologies. I'm particularly interested in Zigbee because I've heard it does some...
0
5440
by: conductexam | last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and then checking html paragraph one by one. At the time of converting from word file to html my equations which are in the word document file was convert into image. Globals.ThisAddIn.Application.ActiveDocument.Select();...
0
3944
by: adsilva | last post by:
A Windows Forms form does not have the event Unload, like VB6. What one acts like?
1
2418
by: 6302768590 | last post by:
Hai team i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated we have to send another system
1
1510
muto222
by: muto222 | last post by:
How can i add a mobile payment intergratation into php mysql website.
0
1254
bsmnconsultancy
by: bsmnconsultancy | last post by:
In today's digital era, a well-designed website is crucial for businesses looking to succeed. Whether you're a small business owner or a large corporation in Toronto, having a strong online presence can significantly impact your brand's success. BSMN Consultancy, a leader in Website Development in Toronto offers valuable insights into creating effective websites that not only look great but also perform exceptionally well. In this comprehensive...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.