|
Apologies for the shouting but this is important.
When answering a question please:
- Read the question carefully
- Understand that English isn't everyone's first language so be lenient of bad spelling and grammar
- If a question is poorly phrased then either ask for clarification, ignore it, or mark it down. Insults are not welcome
- If the question is inappropriate then click the 'vote to remove message' button
Insults, slap-downs and sarcasm aren't welcome. Let's work to help developers, not make them feel stupid.
cheers,
Chris Maunder
The Code Project Co-founder
Microsoft C++ MVP
|
|
|
|
|
For those new to message boards please try to follow a few simple rules when posting your question.- Choose the correct forum for your message. Posting a VB.NET question in the C++ forum will end in tears.
- Be specific! Don't ask "can someone send me the code to create an application that does 'X'. Pinpoint exactly what it is you need help with.
- Keep the subject line brief, but descriptive. eg "File Serialization problem"
- Keep the question as brief as possible. If you have to include code, include the smallest snippet of code you can.
- Be careful when including code that you haven't made a typo. Typing mistakes can become the focal point instead of the actual question you asked.
- Do not remove or empty a message if others have replied. Keep the thread intact and available for others to search and read. If your problem was answered then edit your message and add "[Solved]" to the subject line of the original post, and cast an approval vote to the one or several answers that really helped you.
- If you are posting source code with your question, place it inside <pre></pre> tags. We advise you also check the "Encode "<" (and other HTML) characters when pasting" checkbox before pasting anything inside the PRE block, and make sure "Use HTML in this post" check box is checked.
- Be courteous and DON'T SHOUT. Everyone here helps because they enjoy helping others, not because it's their job.
- Please do not post links to your question into an unrelated forum such as the lounge. It will be deleted. Likewise, do not post the same question in more than one forum.
- Do not be abusive, offensive, inappropriate or harass anyone on the boards. Doing so will get you kicked off and banned. Play nice.
- If you have a school or university assignment, assume that your teacher or lecturer is also reading these forums.
- No advertising or soliciting.
- We reserve the right to move your posts to a more appropriate forum or to delete anything deemed inappropriate or illegal.
cheers,
Chris Maunder
The Code Project Co-founder
Microsoft C++ MVP
|
|
|
|
|
Hello and thank you for any help you may provide. I have a problem that is in my head for the past week and that I can't resolve and I will appreciate any help in resolving it.
In my head I would like to classify objects by category and sub-category, and have the sub-category have object properties according to the subtype... for example
OBJECT : Motorcycle => have name like "Harley Davidson 500 Street", etc
> Category : Automotive > Subcategory : Motorcycle > THEN subcategory has a set of sub-properties like: Engine, Brand, Color, Price,
OBJECT Handbag => have name like "Gucci Guapisima Wherever Edition", etc
> Category : Clothing and Apparel > Subcategory : Brand Handbags > THEN subcategory has a set of sub-properties like: Material, Size, Color, Price,
Not the way I see it is... Most of object share the majority of this structure, like all objects have name, all of them belong to a category and a sub-category, now the problem comes on how to setup properties for each sub-category... for example both objects share the Color and Price but not the other properties. How to make this non-hard-coded? in other words, we know some of the properties are shared between objects, how can we do a model like this and then put this into a form?
I could do a dictionary but in the end, how do I validate them in the form?
Thanks for any help you could provide me.
|
|
|
|
|
You are referring to Classes. In example 1 your base class is Automotive , and the derived class is MotorCycle . You could also have another derived class named Car , etc. See Classes | Microsoft Docs[^] for full details.
|
|
|
|
|
Guillermo Perez wrote: How to make this non-hard-coded?
If you mean that the complete list of properties aren't / can't be known "up front" when you're compiling your code, then you'll need something like an Entity–attribute–value model[^].
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|
Thank you mr Richard, this is more a realistic approach to what I'm looking for, thank you again!
|
|
|
|
|
using System.Diagnostics;
namespace cpu_performance
{
internal class Class1
{
static void Main(string[] args)
{
PerformanceCounter cpuCounter;
PerformanceCounter ramCounter;
cpuCounter = new PerformanceCounter
{
CategoryName = "Processor",
CounterName = "% Processor Time",
InstanceName = "_Total"
};
cpuCounter = new PerformanceCounter("Processor", "% Processor Time", "_Total");
ramCounter = new PerformanceCounter("Memory", "Available MBytes");
Console.WriteLine("Computer CPU Utilization rate:" + cpuCounter.NextValue() + "%");
Console.WriteLine("The computer can use memory:" + ramCounter.NextValue() + "MB");
Console.WriteLine();
while (true)
{
System.Threading.Thread.Sleep(1000);
DateTime localDate = DateTime.Now;
Console.WriteLine("Computer CPU Utilization rate:" + cpuCounter.NextValue() + " %");
Console.WriteLine("The computer can use memory:" + ramCounter.NextValue() + "MB");
Console.WriteLine("Local date and time: {0}, {1:G}", localDate.ToString(), localDate.Kind);
Console.WriteLine();
if ((int)cpuCounter.NextValue() > 80)
{
System.Threading.Thread.Sleep(100 * 60);
}
}
}
}
}
|
|
|
|
|
Few questions for you to think about
- Which database - relational, graph, document?
- What is the database design like - tables, columns, FKs etc.
Then, find a suitable library which allows you to connect to the database and writes to it. For example if you choose SQL or any other relational database, you could make use of ADO.Net and write the database through dataset or direct queries.
"It is easy to decipher extraterrestrial signals after deciphering Javascript and VB6 themselves.", ISanti[ ^]
|
|
|
|
|
I know this may seem arbitrary to some, but the nature of the project that I am currently working on makes this capability an easy way to solve several problems.
I want an efficient, seamless way to integrate values into a stream of characters. I have done this in the past by just converting byte values into chars or even using value.tostring() but it would be more efficient if the characters could be read directly from the memory containing the values. (Examples: an integer is read as 2 characters, a long is read as 4 characters and a GUID is read as 8 characters). This would be really simple in C++. In c# it is turning out to be a huge challenge.
I tried using a generic with using StructLayout.Explicit but I got a runtime error stating that this is not supported. Using non-generics doesn't work either because strings and arrays are classes while values are structs and mixing them also doesn't work for the simple reason that the non zero terminated strings used in .NET track data that is probably inconsistent with this layout.
Is there any way to directly read (or even copy) data from numeric value bytes into a string? I can think of one possibility using unsafe copying but was wondering if I had any other better (more efficient) options.
|
|
|
|
|
I was unable to create a structure that did this. However, I was able to create a generic extender that uses "unsafe" copying to perform the task. The code is below. Still not sure this is the most efficient way to accomplish the task, but it works. The code requires using System.Runtime.InteropServices
public unsafe static string ToBytewiseString<T>(this T item) where T : struct
{
Type t = typeof(T);
int size = t.GetSize();
GCHandle pinnedHandle = GCHandle.Alloc(item, GCHandleType.Pinned);
IntPtr ptr = pinnedHandle.AddrOfPinnedObject();
StringBuilder result = new StringBuilder();
int increment;
if ((size % 2) == 1)
increment = 1;
else
increment = 2;
for (int offset = 0; offset < size; offset += increment)
{
char* c = (char*)((byte*)ptr + offset);
if (increment == 1)
{
ushort c_ = *c;
result.Append((char)(c_ >> 4));
--offset;
increment = 2;
}
else
result.Append(*c);
}
pinnedHandle.Free();
return result.ToString();
}
modified 29-Dec-21 2:32am.
|
|
|
|
|
I am tempted to suggest that you switch to C/C++.
If I understand your question right, you are asking for a C# equivalent of C/C++ 'union'. In my opinion, not offering unions is one of the strong arguments for C# over C/C++.
For the oldtimers: union is a C variant of FORTRAN COMMON blocks, which is one of the craziest ideas of language design! Also, it was one of the greatest threats ever to software robustness.
Doing a simple search for 'C# union' I hit upon C# equivalent to C "union"[^]. I never was aware of StructLayout(LayoutKind.Explicit) and FieldOffset(). Honestly: I haven't been missing out on anything valuable. I may try to forget that I have ever seen it. But maybe you can make use of it.
|
|
|
|
|
trønderen wrote: union is a C variant of FORTRAN COMMON blocks No, COMMON blocks were there so you could share memory between modules. A C union does not provide any sharing capability.
|
|
|
|
|
The common property between unions and common blocks is that they both provide to different users a common blob, telling: Here is a binary blob - interpret it any way you want!
Details in accessability are different; in C you may have somewhat better control over which modules have access to the union definition. And you have collected all the different interpretations of that binary blob in one place (at least until you start casting pointer types).
Yet, the basic concept is the same: A binary blob that can be interpreted in any way that the accessor would like to. Sure, it must be one of the alternatives in the union definition. Just like an interpretation of a Fortran COMMON block must be according to one of the alternative source code definitions that COMMON block in the modules that may access it.
You may argue that collecting the COMMON block definitions / union alternatives in a single place is an improvement. Yes, it is, but the basic idea of a binary blob providing multiple interpretations is the same.
You may argue that while any Fortran module might access that binary COMMON blob, only those C modules including the definition of the union, and knowing the address of (if you like: a pointer to) a union instance, this doesn't give any sort of protection against the uncontrolled interpretation of the binary blob.
Even Fortran COMMON block had some accessability control: You had not only the plain, anonymous COMMON blocks but also named COMMON blocks - sort of comparable to letting only selected modules #include the union type definition: If you didn't know the name of the blob, you didn't have access to it. Sure, it was a poor kind of protection, but lots of protection is based on the (lack of) knowledge of how to access it. C/C++ provides a somewhat better protection.
In this case, considering how easily any C pointer can be cast into a pointer of any other type - and note: the definition of the target type is arbitrary; it doesn't have to be any centrally managed type definition - the type control of C/C++ lies much closer to the weak Fortran type check than to that of C#.
|
|
|
|
|
Whilst you could use COMMON (in FORTRAN) to 'union' data in separate routines, you could not redefined the same COMMON block in the same routine. However, you could use another statement called EQUIVALENT (IIRC - it is some decades since I last wrote any FORTRAN) which does do 'union's - it was often used to remap data in COMMON blocks, but it was not restricted solely to data in COMMON blocks although that was its most frequent use in programs that I inherited in the 1980s.
|
|
|
|
|
Geesh. Did you read my OP? Considering the rest of your post, I guess I shouldn't be that surprised. I already tried an Explicit layout. From my OP: "I tried using a generic with using StructLayout.Explicit but I got a runtime error stating that this is not supported". In other words currently, .NET doesn't allow using explicit layouts with generics. And just because YOU don't find anything valuable doesn't mean it isn't. You apparently don't understand the nature of efficient memory management; nor "robustness"; and your disregard for "oldtimers" is very revealing about both your experience and nature. I would change that attitude before you spend your life eating your words. FYI, my reply above to my own topic is a solution to the problem. What is more robust than not having to introduce a new data type?
modified 30-Dec-21 2:48am.
|
|
|
|
|
primem0ver wrote: ou apparently don't understand the nature of efficient memory management; nor "robustness"; and your disregard for "oldtimers" is very revealing about both your experience and nature.
Hmmmm...
I have 15 years in C/C++. And probably 10 in assembly. I worked on systems with 4k memory.
I have written heap management replacement systems for C and C++ specifically implemented to improve performance for specific applications.
And I have spent decades doing bit twiddling. And I have used the union mechanism in C/C++.
I also have more than a decade in Java. And more than a decade in C#. Each.
In contrast to that I specialize in large systems built to handle millions of customers with sustained throughput of thousands of TPS. I have friends who work with hundreds of thousands of sustained TPS.
I have profiled applications extensively in C++, C# and Java. Not to mention decades of designing applications.
Just wanted to establish what my actual experience is before commenting on what you said.
Presumably this is based on an actual documented design or actual profiling of an existing application under realistic loads and on realistic hardware.
Given that is the case then I would suggest is that if you have a project which actually requires a micro optimization at that level that you should seriously think of using a different language than C#. Such as C/C++. You can create a library with the required functionality and link it in to your C# application. Or even create a stand alone application which handles requests from the C# app. If I had that actual need I would go with the stand alone server. It is going to make maintenance and implementation a lot easier.
|
|
|
|
|
trønderen wrote: I am tempted to suggest that you switch to C/C++.
That is what I was thinking also.
trønderen wrote: I may try to forget that I have ever seen it. But maybe you can make use of it.
lol. Probably a good idea. Tricks like that in C/C++ were to, presumably, to squeeze extra performance out of some small system. Large systems are not impacted by micro optimizations and so one should focus on real performance solutions rather than attempting stuff like this.
|
|
|
|
|
I use MemoryStreams and BinaryReaders / BinaryWriters for handling "binary" data; "characters" being something that depends on the encoding.
"Before entering on an understanding, I have meditated for a long time, and have foreseen what might happen. It is not genius which reveals to me suddenly, secretly, what I have to say or to do in a circumstance unexpected by other people; it is reflection, it is meditation." - Napoleon I
|
|
|
|
|
How to read/write register command in dot net
|
|
|
|
|
You need to provide considerably more detail about your problem.
|
|
|
|
|
You need to know the address of the device (slave id). Then you have to connect to the device; using whatever protocol it expects. Then you can send read / write register requests.
"Before entering on an understanding, I have meditated for a long time, and have foreseen what might happen. It is not genius which reveals to me suddenly, secretly, what I have to say or to do in a circumstance unexpected by other people; it is reflection, it is meditation." - Napoleon I
|
|
|
|
|
Hi,
Which text Editor can be configured to highlight keywords of special programming language(in my case - PPL )? I am looking for Editor with clear and understandable instructions.
|
|
|
|
|
|
Thank you for link on article with detailed explanations. Unfortunally it is good for old versions NetBeans & jdk, so I continue to search.
|
|
|
|
|
I was expecting at least 10 people to shout: Notepad++ !!!
For some reason, that didn't happen.
I presume that we are talking Windows. There is supposed to be a Linux version of it, but I never tried it under Linux, and don't know whether it is fully functional, stable or in other ways suitable.
Maybe even the Windows version doesn't satisfy your requirements. Maybe it doesn't satisfy your understanding of 'clear and understandable instructions'. Several years ago, I did add syntax coloring for another (script) language, and found it fairly simple - but I am not afraid of editing XML files by hand.
In any case, NPP is a great pure text editor. I have used it since I left DOS and Brief ... Some people say that NPP was more a clone of Brief than of Windows Notepad, and I tend to agree. Today it has developed far beyond either.
You can find NPP at notepad-plus-plus.org[^]
|
|
|
|
|