Use NGen To Generate Native Images Of Their Assemblies?
Oct 20, 2009
Does anyone use NGen to generate native images of their assemblies? I have always been quite puzzled by NGen because all MS articles that describe it basically make it sound like it has quite a few advantages compared to the disadvantages. Basically it looks like it will improve the speed of your application in most cases but if that is the case then why doesnt everyone use it all the time?or maybe they do and its just me that has not really used it much.The Native Image Generator (Ngen.exe) is a tool that improves the performance of managed applications. Ngen.exe creates native images, which are files containing compiled processor-specific machine code, and installs them into the native image cache on the local computer. The runtime can use native images from the cache instead using the just-in-time (JIT) compiler to compile the original assembly.
I have a file called CalcProg.DLL written in Delphi which is used in Plaxis. I am planning to write a VB.net wrapper for this DLL. The problem is that I don't know what function names there are in the DLL. I was wondering if there was a wrapper generator so I could input a DLL and the generator generates a dummy CalcProg.vb with the function names so I could have a VB class that does something like this:
I simply want to speed up web services so the first call does not take 8-10 seconds, while the subsequent calls take a half a second. I have learned that the Generate Serialization Assemblies option in Visual Studio does not actually use sgen to generate the dll. So I used sgen with the dll my web service uses to create the MyWebService.XmlSerializers.dll file, and it did create it. So then I placed onto the server. I still have the same speed problem. Do I have to place something in the config file to tell it to use this? Do I have to learn all sorts of parameters with sgen to make sure I set it up properly?
I am trying to generate random images from access database using hashset as it is said to be unique and there won't be any repeated images appearing. But, it doesn't seem to work. ow can i get it to work? By the way, i am very new to the concept of hashset.
Private Function GetImageFromByteArray(ByVal picData As Byte()) As Image If picData Is Nothing Then Return Nothing
I am trying to generate random images from access database using hashset as it is said to be unique and there won't be any repeated images appearing. But, it doesn't seem to work.
How can i get it to work? By the way, i am very new to the concept of hashset. Private Function GetImageFromByteArray(ByVal picData As Byte()) As Image If picData Is Nothing Then Return Nothing End If
' is this is an embedded object? Dim bmData As Integer = If((picData(0) = 21 AndAlso picData(1) = 28), 78, 0)
' load the picture Dim img As Image = Nothing Try Dim ms As New MemoryStream(picData, bmData, picData.Length - bmData) img = Image.FromStream(ms) Catch End Try
' return what we got Return img
End Function
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Panel1.Visible = False Panel2.Hide()
Dim conn As New OleDbConnection Dim DA As OleDbDataAdapter Dim DS As New DataSet
Dim oledbconnection As OleDbConnection oledbconnection = New System.Data.OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:Documents and SettingsAdministratorDesktopdb1.mdb;Jet OLEDB:System Database=system.mdw;")
oledbconnection.Open() Dim command As OleDbCommand command = New OleDbCommand("select count (*) from PicturesDisplayed", oledbconnection) Dim count As Integer count = command.ExecuteScalar() oledbconnection.Close()
Dim randomImage As New HashSet(Of Integer) ' Create a integer and new Random object Dim intPic As Integer Dim rand As New Random
'Pick a random number between 0 and the number of images in database intPic = rand.Next(0, count) randomImage.Add(intPic)
PictureBox1.Height = 256 PictureBox1.Width = 256
PictureBox2.Height = 256 PictureBox2.Width = 256
Dim pic1x As Integer = _ (Me.ClientSize.Width - PictureBox1.Width) 2 Dim pic1y As Integer = _ (Me.ClientSize.Height - PictureBox1.Height) 2 PictureBox1.Location = New Point(pic1x, pic1y)
Dim pic2x As Integer = _ (Me.ClientSize.Width - PictureBox2.Width) 2 Dim pic2y As Integer = _ (Me.ClientSize.Height - PictureBox2.Height) 2 PictureBox2.Location = New Point(pic2x, pic2y)
' Now set the picturebox image equal to the image chosen from the array randomly using the random PictureBox1.Image = GetImageFromByteArray(DS.Tables(0).Rows.Item(intPic).Item(0)) PictureBox1.Visible = True PictureBox2.Image = GetImageFromByteArray(DS.Tables(0).Rows.Item(intPic).Item(2)) PictureBox2.Visible = False
If (randomImage.Count = count) Then Me.Close() End If
i have an application that i need to speed-up, i think using Ngen will do this for me but i have no idea how to do it, is ngen something that run's when the user installs my applicartion, is this somthing i do before i create an installation program?
I have started working on a legacy project (ASP.NET 1.1) which was done in an old machine (which I dont have access to). And I am unaware of the development environment settings used for building this project.
Nonetheless, I am able to build the project and deploy it all well from my machine (I created the full development enviroment locally). In my machine everything works great.But some screens where one of the assembly dlls (third party dlls) are used do crash on any machine other than mine! They probably do net get the proper assembly (with matching version or something), even though when I have put all the assemblies in bin (and used the same files while adding references to the project). .NET runtime probably tries to find them in the GAC of the other computers? Or probably in my system itself it loads from GAC and not from the bin? How could I know all this? The question is it runs perfectly fine on my machine, where the assemblies are at both places - in bin and in GAC.
I am lost what I should do to so that no matter which machine I deploy the project, it should always look in bin only! Also, I dont want to change the code in any way because its a legacy code and has been working all right since ages! Just some settings e.g. maching.config or soemthing?
I am trying to get all assemblies in CurrentDomain using AppDomain.CurrentDomain.GetAssemblies() to write their FullName into a DropDownList, however if I don't instantiate them, they are not seen in returned array from GetAssemblies() in CurrentDomain.They are all added as Reference and in Reference folder of the solution. Only time I can get them from the GetAssemblies() is when I first instantiate them.How to overcome this problem with an easy and more generic way instead of instantiate them everytime when I add new Assembly, etc.Due to company policy, I have to obfuscate some parts of the images: All the assembilies are referenced in Reference folder:
I have an external database that is feeding information to me. One saves their data as native GUID format and my other data source supplies standard .NET GUID format string. Is there a tidy way to convert from Native GUID to GUID Structure? Also is there any validation bit to determine if a provided value is a Native GUID or not? I can't seem to find any if there is one. The difference is as follows:
typedef struct _GUID { DWORD Data1; WORD Data2; WORD Data3; BYTE Data4[8]; } GUID;
Data1, Data2 and Data3 get their byte order reversed but Data4 remains the same, see [url] for more info.
I have a windows forms Application using DCOM to connect to another server in order to retrieve data from a database. The program works perfectly fine on my develeopment box both inside of and outside of the idea.However it throws an exception on my test box: System.Exception.... TYPE_E_CANTLOADLIBRARY. The error happens when accessing a property of on the the public DCOM classes. The property holds an instance of one of the private classes for the DCOM. I've compared the registries and all the relevant entries seem to be the same. When I compared the dumps I noticed that System.Config and System.XML werent loaded on the test machine, even though they are installed and appear to be in the GAC.
I am writing a program and I want the program to support plugins. I created an interface that the program must implement. I am using the following code from my main program to call the plugin:
Dim asm As Assembly = Assembly.LoadFrom(ff.FullName) ' Get the type Dim myType As System.Type = asm.GetType(asm.GetName.Name + "." + asm.GetName.Name) ' If the type is null then we try again without the root namespace name
[code]....
I set this property from my main program and everything works. Except, after a while, m_PanelObject gets set to Nothing for some odd reason. I'm not setting it to Nothing anywhere in my program and there is no place in the plugin code that sets it to Nothing.
We've built a small component which takes an Id, looks up an entry in the database for an assembly/namespace/class, and dynamically loads an instance of the class that we're after. It has been working fine up until now, but when running this code in VS 2010, it's failing.
Private Function AssemblyLoaded(ByVal assemblyFile As String) As Assembly Dim assemblies() As Assembly = AppDomain.CurrentDomain.GetAssemblies For Each asmb As Assembly In assemblies
[Code]....
But it feels dirty. Is there a better way of checking if an assembly is already loaded, and handing that back to the caller? Are the issues above specific to .NET 4.0 or Visual Studio 2010? I haven't tried this outside the IDE as it requires fairly significant configuration.
I have a vb6 project in which I use a dll library to do some tasks. For that, I add a module which declares all functions of that library such as:Declare Function myFunction Lib "abcdapi.dll" (ByVal hVar1 As Long, ByVal hVar2 As Long) As Long When I call this function (and many other similar) I'm able to do the work and correct Long pointer is returned. But when I try to do the same thing by VB.net (by importing the same library using dllimport and calling the same function), I get no result. although it does return some pointer but that doesn't produce correct result.
I need to convert a windows service written in .NET into native code, independent of the .NET framework. I've looked into using NGen to do this, but couldn't figure out how to use it. Essentially, I would like to take my windows service, run it through *insert app here* and have it bundle together all of the dependent dlls from the framework into their native code equivalents, so the service is installable without the framework.
I'm using VB.Net 2008, and I'm having difficulty finding information on how to detect the presence of the SQL Native Client components. I would like to detect their presence on a computer, and then find the version of the components.Does anyone have any information?
I'm looking at a small remoting project in VB.NET. Initial research turns up references to msrdp.ocx which my Windows 7 Ult system doesn't have; a filesystem search on the same platform turns up MsRdpWebAccess.dll which doesn't appear to be well documented; finally hunting through COM references in Visual Studio turns up rdpencom.dll labeled "rdpcomapi 1.0 Type Library" which seems to be best documented via personal developer blogs (which isn't encouraging but is a lot better than other options).
My goal is a lightweight remoting application I can deploy to Windows 2000 Client/Server, WinXP x86/x64, Win2k3 Server, Vista x86/64, and Win2k8 Server.Is there anything DotNET Native I can use instead of one of these COM libraries? Is one of these COM libraries better for the job overall than others; and then am I going to have platform-specific compatibility issues if I don't provide support for more than 1 of them in my app?
I'm deploying a vb 2005 application that references crystal report XI release 2 components. How do i install these components to the gac? The client machine does not have gacutil and i don't know how to use msi to do the job. I have researched the web for answers without success.
If I try to call my extension method which is defined like this:
Module LinqExtensions <System.Runtime.CompilerServices.Extension()> _ Public Function ToSortableBindingList(Of TSource)(ByVal source As IEnumerable(Of TSource))
I thought I would practice using reflection by building an Object Browser similar to what's in VS2010.
The reflection part is easy enough, but I'm can't find any means of determining where all of the assemblies are installed. On my machine (Win 7) the GAC would seem to be located at C:Windowsassembly.
However, 4.0 assemblies look to be located at C:WindowsMicrosoft.NETassembly in either GAC_32 or GAC_MSIL.
VS Object Browser obviously knows where to look, you can even filter on "All Components" or select a framework version.
But when I look at the Object Browser in VS, I find that it lists assemblies from several different locations: For example...
CODE:
How does VS know to list these assemblies? Is there some registry key I'm missing that defines all of these locations?
Ok, I've read every question on here about strong named assemblies and just want to clarify something. First though, from what I've read, GAC aside, strong named assemblies prevent a malicious 3rd party changing and impersonating your code. It'd be great to have some links to some real world examples of this kind of spoofing that happened pre strong named assemblies. If security or the GAC are not a concern, It seems that it's still advisable to strong name assemblies because:
(A) Clients who have strong named assemblies can only reference your assemblies if they are signed.
(B) Clients who do not have strong named assemblies can reference your assembly whether it's signed or not.