CLR Inside out the Performance Benefits of Ngen. Surupa Biswas T Ypically, Methods in Managed Executables Are Just-In-Time (JIT)

Total Page:16

File Type:pdf, Size:1020Kb

CLR Inside out the Performance Benefits of Ngen. Surupa Biswas T Ypically, Methods in Managed Executables Are Just-In-Time (JIT) CLR Inside Out: The Performance Benefits of NGen. Page 1 of 10 CLR Inside Out The Performance Benefits of NGen. Surupa Biswas Contents Why Use NGen? Using NGen Assemblies and the GAC Choosing Base Addresses Avoid Rebasing NGen and Multiple AppDomains Using Hardbinding Regenerating NGen Images Final Notes T ypically, methods in managed executables are just-in-time (JIT) compiled. The machine code generated by the JIT compiler is thrown away once the process running that executable exits; therefore, the method must be recompiled when the application is run again. Moreover, the generated code is tied to the process that created it and cannot be shared between processes that are running the same application. These characteristics of .NET JIT compilation can have performance drawbacks. Fortunately, NGen (native image generation) offers some relief. NGen refers to the process of precompiling Microsoft® intermediate language (MSIL) executables into machine code prior to execution time. This results in two primary performance benefits. First, it reduces application startup time by avoiding the need to compile code at run time. Second, it improves memory usage by allowing for code pages to be shared across multiple processes. Although at first glance NGen appears to be similar to traditional static back-end compilation, it is actually quite different. Unlike statically compiled binaries, NGen images are tied to the machine where they are created and hence cannot be deployed. Instead, the application's installer needs to issue commands to create native images for the specific assemblies on the client machine at setup time. Also unlike traditional binaries, NGen images merely form a cache-managed applications will continue to run correctly even if all the NGen images are deleted. Of course, there will be a performance hit if that happens, but there will be no correctness issues. On the other hand, managed applications may fail to run correctly if the MSIL assemblies are deleted once they have been compiled into NGen images. Why Use NGen? NGen typically improves the warm startup time of applications, and sometimes the cold startup time as well. Cold startup time refers to the time taken to start an application soon after a machine reboot, such that the application is being launched for the first time after that reboot. Warm startup time, on the other hand, is the time taken to start the application given that it was launched in the recent past (and there were no reboots in between). Cold startup time is primarily dominated by the number of pages that need to be fetched from disk. The improvement in cold startup time while using NGen can be attributed largely to the fact that pages of MSIL that need to be touched during compilation no longer need to be accessed at execution time. mk:@MSITStore:C:\INetSave\MSDNMagazineMay2006en-us.chm::/CLRInsideOut/... 06.10.2017 CLR Inside Out: The Performance Benefits of NGen. Page 2 of 10 Improvements in warm startup time come from reusing pages of the NGen images that were brought in when the application had been running earlier. This is especially beneficial to large client-side UI applications where startup time is critical to the user experience. NGen also improves the overall memory usage of the system by allowing different processes that use the same assembly to share the corresponding NGen image among them, as shown in Figure 1. This can be very useful in both client and server scenarios in which the total memory footprint must be minimized. A classic example is the Terminal Services scenario in which a large number of users might be logged in and running the same application at the same time. If you're building libraries or other reusable components, you may also want to use NGen so that applications using your components can share the generated code pages. It is important to note that NGen does not always improve the cold startup time of applications, since NGen images are larger than MSIL assemblies. The only way to determine whether cold startup time and working set will improve or degrade with NGen for specific scenarios is to actually measure them. (More on performance measurement later.) Using NGen Figure 1 Sharing Code Among Processes You can precompile your application with NGen by using the ngen.exe tool that ships with the Microsoft .NET Framework redistributable. The .NET Framework 2.0 has a completely reworked version of this tool and also has a new NGen service called the .NET Runtime Optimization service, which is capable of NGen-compiling assemblies in the background. Thus, NGen now supports both synchronous and asynchronous compilation. The complete syntax for ngen.exe can be found at .NET Framework Tools. All NGen images are installed in the native image cache, which is located in the %WINDIR% \assembly directory. For example, "NGen install foo.exe" will create a native image called foo.ni.exe and install it in the native image cache. Figure 2 shows the location of the native image for System.Web.dll. Figure 2 Native Image Cache Using the NGen tool you can choose to compile your assemblies either synchronously (for example, "NGen install foo.exe") or asynchronously with one of three priority levels (for example, "NGen install foo.exe /queue:3"). The asynchronous commands return immediately and are processed in the background by the NGen service. Assemblies queued up with priority 1 or 2 are compiled as soon as possible by the NGen service (priority 1 assemblies are compiled before priority 2 assemblies). Priority 3 assemblies are compiled by the service when it detects that the machine is idle. You can also use the executeQueuedItems command-line switch to force all queued items to be executed, as mk:@MSITStore:C:\INetSave\MSDNMagazineMay2006en-us.chm::/CLRInsideOut/... 06.10.2017 CLR Inside Out: The Performance Benefits of NGen. Page 3 of 10 shown in Figure 3. Figure 3 Asynchronous NGen Compilation Using synchronous NGen at install time guarantees that end users will never launch your application without all the assemblies having been precompiled by NGen. However, this causes setup to take longer because the compilation time is now added to the overall install time. As an alternative, the application's setup program can issue asynchronous NGen commands. Using asynchronous NGen with priority 1 or 2 ensures that the native images will be available soon after setup completes. There is, however, a risk of the compilation work adversely affecting the performance of other applications or the system's response time to user inputs. The other option is to use asynchronous NGen with priority 3. Priority 3 compilation seems like it's "free" in the sense that it neither consumes machine cycles during setup nor disrupts system performance. However, since machines may not be idle for extended periods of time immediately after the install, the end user could launch and use the application before the NGen service gets an opportunity to compile the assemblies. Therefore you can finely tune this trade-off by dividing your application's assemblies into categories and precompiling each of these differently. Assemblies that are absolutely critical to startup time can be compiled synchronously, those that are important but not critical can be compiled by the service as priority 1 or 2, and those in less frequently used execution paths can be compiled by the service as priority 3. Assemblies and the GAC In order to get the optimal performance from NGen, all assemblies in the application need to be strong-named and installed into the Global Assembly Cache (GAC) prior to compilation. If an assembly is strong-named and not installed into the GAC, the loader will need to verify the assembly's signature at load time. Validating the strong-name signature requires the loader to parse the entire contents of the MSIL assembly, compute a hash, and then compare it to the assembly's signature. The verification process therefore fetches every page of the MSIL assembly from disk. This results in a spike in the application's working set, increases load time, and pollutes the OS disk cache. If the assembly were installed in the GAC, however, the loader would not need to validate the strong-name signature at load time. This is because the signature of the assembly is verified at the time it is installed into the GAC. The loader assumes that since the GAC is a secure store that can only be modified by an administrator, and since the signature was verified at GAC installation time, it can skip revalidating the contents. When the loader attempts to load a pure MSIL assembly from the GAC and discovers a matching NGen image, it directly loads the NGen image. In that scenario, mk:@MSITStore:C:\INetSave\MSDNMagazineMay2006en-us.chm::/CLRInsideOut/... 06.10.2017 CLR Inside Out: The Performance Benefits of NGen. Page 4 of 10 not even a single page of the MSIL assembly needs to be fetched into memory. This difference in behavior usually causes a significant difference in the startup time of NGen- compiled applications. Unless you have a reason to not want to install the assemblies into the GAC, it is highly recommended that you do so in order to get the best performance from NGen. Of course, the cost of validating the strong-name signature at run time in the non-GAC case is incurred regardless of whether the application is JIT-compiled or NGen-compiled. In the NGen case, it is just particularly painful since some or all of the MSIL pages that are brought into memory during signature verification may not be used during execution. Information on how to sign an assembly and then install it into the GAC can be found at "How to install an assembly into the Global Assembly Cache in Visual C#".
Recommended publications
  • THICK TURRET TOOLING SOLUTIONS Standards, Specials and Accessories
    THICK TURRET TOOLING SOLUTIONS Standards, Specials and Accessories My Account by Wilson Tool International A ! va ow ilable N WILSON STYLE 6 6 Small Station Advantages 8 HPX® A Station 10 HPX® B Station 12 EXP® A & B Station 14 HP2 and HP A Station 16 HP2 and HP B Station 18 HP A Station, Heavy Duty 20 HP B Station, Heavy Duty 22 Basix A Station 24 Basix B Station 26 Basix A Station, Heavy Duty 28 Basix B Station, Heavy Duty 30 Large Station Advantages 32 HP C Station 34 HP D Station 36 HP E Station 38 HP Notcher Stripper Plate 38 Bonded Urethane Stripper Plates COATINGS 39 Contents METRIC STYLE 40 PARTING TOOLS 77 40 Small Station Advantages 78 HP DuraBlade® D Station 42 HPX® A Station 80 HP DuraBlade® E Station 44 HPX® B Station 82 Dura-Die 46 EXP® A & B Station 82 Close to Clamp Slitting Die 48 HP2 A Station 83 Close to Clamp Replacement Parts 50 HP2 B Station 84 Standard Parting Tools 52 Basix A Station 84 Mate Ultra Replacement 54 Basix B Station 84 Amada Alpha Replacement 56 Large Station Advantages 84 Amada Q Series Replacement 58 HP C Station 60 HP D Station 62 HP E Station ULTRA 64 Standard C Station REPLACEMENT 66 Standard D Station 85 68 Standard E Station 70 Basix C Station 72 Basix D Station MULTI-TOOLS 74 Basix E Station 87 88 MTX3iR TOOL STEEL 89 MTX8iR 76 90 MTX8i 91 MT20i | MT6A | MT7A 92 Replacement Tools SPECIALS 93 ACCESSORIES 132 94 QuickTap® Tapping Tool C-Station 132 Hand Tools 95 QuickTap® Tapping Tool D-Station 134 Digital Measuring Equipment 96 Coining Tools 134 Zip-Mar Discs 97 Card Guide 135 Alignment Tools
    [Show full text]
  • What Is It and Why Should VFP Developers Care?
    The X-Sharp Project What is it and why should VFP developers care? X# Vendor Session October 2019 X#: a new incarnation of an old development language X# Vendor Session October 2019 Agenda • A bit of history • Why X# • What is X# • X# and Visual FoxPro • New Features • Where can I get it X# Vendor Session October 2019 xBase languages, a bit of History -1 • Started at JPL with a project called Vulcan, by Wayne Ratliff (PTDOS, Later CP/M) (1978) • Ashton Tate bought it and released it under the name dBASE II for Apple II and DOS (1980) • An improved version dBASE III in 1984 • In the 80’s several competitors appeared on the market: Clipper, FoxBASE, DBXL, QuickSilver, Arago, Force, FlagShip and many more. Together these products were called “xBase”. The share the programming language and many functions and working with DBF files • Some were faster, others allowed to sell royalty free compiled versions of apps • Then Microsoft launched Windows in 1990 X# Vendor Session October 2019 xBase languages, a bit of History -2 • The move to Windows resulted in several product changes, also products were sold and resold: • dBase (AT) -> (Borland, Inprise, Borland) • QuickSilver -> Borland, then vanished • FlagShip -> MultiSoft (Various Unix versions, Windows) • Clipper (Nantucket)-> Visual Objects (Computer Associates) • FoxBASE (Fox Software) -> FoxPro (Microsoft) • Some products “died” • New products appeared, especially as successors of Clipper • (x) Harbour (open source, also for unix) • Xbase++ X# Vendor Session October 2019 xBase languages, a bit of History -3 • Now in the 2010’s most of these products are ‘dead’, no longer developed for various reasons.
    [Show full text]
  • Diploma Thesis
    Faculty of Computer Science Chair for Real Time Systems Diploma Thesis Porting DotGNU to Embedded Linux Author: Alexander Stein Supervisor: Jun.-Prof. Dr.-Ing. Robert Baumgartl Dipl.-Ing. Ronald Sieber Date of Submission: May 15, 2008 Alexander Stein Porting DotGNU to Embedded Linux Diploma Thesis, Chemnitz University of Technology, 2008 Abstract Programming PLC systems is limited by the provided libraries. In contrary, hardware-near programming needs bigger eorts in e. g. initializing the hardware. This work oers a foundation to combine advantages of both development sides. Therefore, Portable.NET from the DotGNU project has been used, which is an im- plementation of CLI, better known as .NET. The target system is the PLCcore- 5484 microcontroller board, developed by SYS TEC electronic GmbH. Built upon the porting, two variants to use interrupt routines withing the Portabe.NET runtime environment have been analyzed. Finally, the reaction times to occuring interrupt events have been examined and compared. Die Programmierung für SPS-Systeme ist durch die gegebenen Bibliotheken beschränkt, während hardwarenahe Programmierung einen gröÿeren Aufwand durch z.B. Initialisierungen hat. Diese Arbeit bietet eine Grundlage, um die Vorteile bei- der Entwicklungsseiten zu kombinieren. Dafür wurde Portable.NET des DotGNU- Projekts, eine Implementierung des CLI, bekannter unter dem Namen .NET, be- nutzt. Das Zielsystem ist das PLCcore-5484 Mikrocontrollerboard der SYS TEC electronic GmbH. Aufbauend auf der Portierung wurden zwei Varianten zur Ein- bindung von Interrupt-Routinen in die Portable.NET Laufzeitumgebung untersucht. Abschlieÿend wurden die Reaktionszeiten zu eintretenden Interrupts analysiert und verglichen. Acknowledgements I would like to thank some persons who had inuence and supported me in my work.
    [Show full text]
  • Descargar Y Compilar Gambas, ¡ Lea CUIDADOSAMENTE Las Usted Debe Tener Privilegios Para Escribir El Siguientes Recomendaciones !
    Tercera edición digital de MYGNET-MAGAZINE Enero 2006 Les deseamos que este año se para todos de muchas oportunidades y que se cumplan todos nuestros sueños y propósitos. También queremos reconocer el excelente trabajo de los colaboradores que han brindado los contenidos de este número, así pues agradecemos el enorme apoyo que hemos recibido de parte de todos los colaboradores como lectores. Es muy alentador recibir sus comentarios y opiniones para continuar este esfuerzo y generar un producto de gran valor para todos. Les reiteramos la invitación para que participen con nosotros. Editores Martín Roberto Mondragón Sotelo. [email protected] Gustavo Santiago Lázaro. [email protected] Escríbenos a [email protected] Visítanos a http://www.mygnet.com o http://www.mygnet.org Aplicaciones Backup y recuperación en frió................................................................................................................................................... 3 DotGNU Portable.NET................................................................................................................................................................... 4 Instalación de Gambas – Notas importantes ........................................................................................................................ 6 Gambas – Compilación e instalación ..................................................................................................................................... 7 Tablas externas en Oracle 9i.....................................................................................................................................................
    [Show full text]
  • Farm Bill Conference Committee Meets, but Challenges Lie Ahead
    Volume 33 November 1, 2013 Number 41 Scan this code for breaking Farm bill conference committee news and the latest markets! meets, but challenges lie ahead A WASHINGTON — The farm bill passed earlier this year. with my House colleagues, like its provisions in the fi nal bill. bill conference committee (For a complete list of farm we did in the Senate, to develop “The conference should INSIDE held a public meeting Wednes- bill conferees, see “Shutdown a fi nal bipartisan farm bill that follow the lead of the House day to begin discussing the ends, Congress poised to move reforms agriculture programs, of Representatives, which ✦ Cheese, butter stocks prospects for passing a fi nal, on farm bill” in the Oct. 18, provides certainty for farmers rejected a controversial new decline from August. 5-year farm bill before the end 2013, issue of Cheese Market and saves taxpayers billions. dairy program to impose milk of the year. News.) No further meetings This bill is the most signifi cant quotas on dairy farmers by a For details, see page 5. The four principal con- have been announced at this reform to agriculture policy more than two-to-one margin ✦ Zwirner Equipment Co. ferees — Senate Agriculture time, and the House will not be in decades, it’s critical for the — 291-135 — including almost opens new business Committee Chair Debbie in session again until Nov. 12. economy and it’s long-past half of the House Democrats,” with decades of experience. Stabenow, D-Mich.; rank- Peterson notes that the time to get it done.” Slominski says.
    [Show full text]
  • Comparative Programming Languages CM20253
    We have briefly covered many aspects of language design And there are many more factors we could talk about in making choices of language The End There are many languages out there, both general purpose and specialist And there are many more factors we could talk about in making choices of language The End There are many languages out there, both general purpose and specialist We have briefly covered many aspects of language design The End There are many languages out there, both general purpose and specialist We have briefly covered many aspects of language design And there are many more factors we could talk about in making choices of language Often a single project can use several languages, each suited to its part of the project And then the interopability of languages becomes important For example, can you easily join together code written in Java and C? The End Or languages And then the interopability of languages becomes important For example, can you easily join together code written in Java and C? The End Or languages Often a single project can use several languages, each suited to its part of the project For example, can you easily join together code written in Java and C? The End Or languages Often a single project can use several languages, each suited to its part of the project And then the interopability of languages becomes important The End Or languages Often a single project can use several languages, each suited to its part of the project And then the interopability of languages becomes important For example, can you easily
    [Show full text]
  • Gl Name Subcatdesc Asin Ean Description Qty Unit Retail
    GL NAME SUBCATDESC ASIN EAN DESCRIPTION QTY UNIT RETAIL Musical Instruments Dj Headphones B01BCD3DRA 4010118719004 beyerdynamic T 5 p (2nd Generation) High-End Portable Headphones 1 848,46 Automotive Motorcycle Helmets B07P9VB2PS 8804269250136 HJC RPHA 11 VENOM MARVEL II MC1 XL 1 576,38 Video Games B07K1FLC3W 889842396409 Xbox One X White 1TB console Forza Horizon 4 + Forza Motorsport 7 bundle 1 443,09 Video Games Xbox One Consoles B07FF24NBH 5027757108730 Xbox One X 1TB console Forza Motorsport 7 Bundle 1 434,44 Video Games Playstation 4 Consoles B07K14XKZH 711719937364 Sony PlayStation 4 Pro 1TB Console - Black (PS4 Pro) 1 348,65 Automotive Motorcycle Helmets B018W05LCG 768686688126 Bell Powersports Bullitt Motorradhelm, WeiĂź (Stripes Pearl WeiĂź), XL 1 309,80 Musical Instruments Cymbals B00SO5Z3FA 840553014662 Meinl Cymbals B20DUCR Byzance Extra Dry 20-Inch Dual Crash/Ride Cymbal (VIDEO)1 305,16 Automotive Suspension & Chassis B0068NR6EG 4025258621582 Bilstein 40076638 Luftfeder, Fahrwerk 1 301,43 Video Games Xbox One Consoles B0769JGQNJ 889842214048 Xbox One S 1TB Console - Assassin's Creed Origins Bonus Bundle (Xbox One) 1 294,63 Video Games Other B01M6ZGICT 45496452315 Nintendo Switch (Grey) 1 293,11 Video Games Playstation 4 Consoles B013BOERFU 711719859031 Sony PlayStation 4 Console 500 GB Edition Jet Black 1 284,36 Sports Range Finders B01BM5KN30 29757016591 Bushnell Unisex's Compact Tour V4 Jolt Rangefinder, White 1 269,00 Video Games Multi-Platform Headsets B07B819VMQ 5707119029605 SteelSeries Arctis Pro Wireless - Gaming Headset
    [Show full text]
  • Dairy Industry Players Discuss Prospects for 2012 Farm Bill
    Volume 31 January 13, 2012 Number 51 Scan this code for breaking Dairy industry players discuss news and the latest markets! prospects for 2012 Farm Bill By Alyssa Sowerwine Congress has made it very dif- Deficit Reduction, commonly year, the fact that nothing was ficult for progress to be made referred to as the “supercom- passed creates an opportunity INSIDE WASHINGTON — With the on any legislation, let alone mittee,” last fall. While that to “wipe the slate clean” to al- 112th Congress reconvening for dairy reform. package was declared “dead low for further discussion and F Export Tool Kit: its second session this month, David Hickey, director of on arrival” since the supercom- negotiation, Slominski notes. ‘2012: The good, the the dairy industry is eager to government relations for the mittee failed to come to an Hickey notes that even if bad and the unknown.’ move forward on the antici- National Milk Producers Fed- agreement, it still will likely progress is made in farm bill For details, see page 4. pated 2012 Farm Bill. eration (NMPF), also notes be used as a springboard for hearings throughout early Stakeholders say much that stalled progress on federal reform going forward, industry 2012, there may not be enough F Estate Cheese Group uncertainty surrounds both the debt and budget negotiations stakeholders say. time to negotiate and pass a bill acquires Sonoma content and timing of the farm has created a backlog of sorts. The full package submitted by the end of the year. Creamery from Pulmuone, legislation, as well as the fund- Hickey adds that while de- to the supercommittee has not Chelsee Woodey, director Monterey Gourmet Foods.
    [Show full text]
  • The New Future of Xbase for .NET
    The new future of Xbase for .NET The X-Sharp Project XSharp Announcement September 2015 What is XSharp (X#) • XSharp is an open source XBase language for .NET • The XSharp project was founded by familiar people: • Robert van der Hulst • Fabrice Foray • Nikos Kokkalis • And others that want to remain anonymous (for now) XSharp Announcement September 2015 Why XSharp ? • We were unhappy with the speed of progress in Vulcan.NET and wanted to make the customer base of the product larger • There are many XBase developers outside the VO/Vulcan world that have no migration path to DotNet. Vulcan is too closely linked to VO and does not offer an easy migration path for those developers • The world is moving to Open Source software. By creating an open source XBase language for DotNet we hope to attract people from different XBase dialects. XSharp Announcement September 2015 Who are we targeting? • Current Vulcan.NET users • Other xBase developers • Visual Objects • FoxPro • Xbase++ • dBase • (x)Harbour XSharp Announcement September 2015 X# - What is it • The X# product will consist of various components • A Compiler that supports different dialects of XBase • Runtime libraries for each of the dialects • Visual Studio integration • Documentation • Online forums • Support Contract XSharp Announcement September 2015 The X# Compiler -1 • Will support many dialects of XBase . Core . Visual Objects / Vulcan . Xbase++ . FoxPro . dBase . (X)Harbour • The Core dialect could be seen as a C# compiler with Xbase syntax. • The other dialects will add datatypes and language constructs that are Xbase specific, such as USUAL, DATE, CODEBLOCK, FUNCTION, METHOD, GLOBAL etc.
    [Show full text]
  • Data/Code Driven UI Mit WPF Teil 1
    Differences between VO and X# The major differences between VO and X# Wolfgang Riedmann [email protected] Meeting Italiano 2018 a Bolzano Runtime A X# application is executed under the control of the .NET runtime and not anymore under the control of a proprietary runtime. This changes a few things: • Stabler runtime, more performant garbage collector • Available on all .NET platforms: x86, x64, AnyCPU, Linux • Some features of the VO language are not available anymore. For example: access/assign cannot have the same name as a method, a class cannot have the same name as the enclosing binary • The repository with its incremental compiling does not exists anymore, the code is located in prg files, but can be organized in folders and subfolders • The ErrorBlock is not available anymore!!! • The largest code library is available at no cost: the .NET Framework with thousands of classes • Faster codeblocks, but slower in the compilation (for now!) • Function() does not exists anymore, is emulated by static methods of the class Functions. You can continue to write and use functions. • Access/Assign does not exists anymore, is emulated with property. An assign cannot return any value! Meeting Italiano 2018 a Bolzano Runtime? What is it? As runtime we specify the libraries/DLLs than come with : • The real runtime: data types, base functions, macrocompiler. • VO 2.8: VO28RUN.DLL • Vulcan: VulcanRT.DLL, VulcanRTFuncs.DLL, VulcanMacroCompiler.DLL • X#: Xsharp.Core.DLL, Xsharp.VO.DLL, Xsharp.MacroCompiler.DLL • Data access functionality: RDD (Replaceable database drivers): • VO 2.8: CavoDBF.RDD, DBFCDX.RDD, DBFNTX.RDD, _DBFCDX.RDD • Vulcan: VulcanDBFCDX.DLL, VulcanDBFFPT.DLL • X#: currently in development, beta planned for August 2018 • Class Libraries (System, GUI, RDD, SQL, OLE, Windows API, Internet): • VO 2.8: VO28SYS.DLL, VO28GUI.DLL, VO28RDD.DLL, VO28SQL.DLL, VO28OLE.DLL • Vulcan: VulcanVOSystemClasses.DLL, VulcanVOGUIClasses.DLL, VulcanVORDDClasses.DLL, VulcanVOSQLClasses.DLL • X#: will be created by a tool from your own VO source code.
    [Show full text]
  • Look at X Sharp!
    Look at X Sharp! Eric Selje Salty Dog Solutions, LLC Madison, WI USA Voice: 608-213-9567 Website: www.SaltyDogLLC.com Email: [email protected] Would you be interested in a product that compiles your existing Visual FoxPro projects into .NET code? Well, that product doesn't exist, but there is a compelling product called X# that is working towards that goal. They've got a mature product that compiles many dialects of xBase to .NET already, and they're now actively working on VFP syntax. In this session we'll look at X# from this Visual FoxPro developer’s point of view. Look at X Sharp! You will learn: • A brief history of the xBase language family tree • How close a real FoxPro to .NET compiler is • Whether this is a product you can move forward with, given your current skill set • Whether this is even a direction you want to go Preface This whitepaper cannot be a complete documentation about all things X#. My intended audience is the Visual FoxPro developer who’s looking at options for either new development or a candidate for migrating their existing projects. I hope after you read this whitepaper as well as my own conclusions you’ll be more informed about what X# is and what it is not and will be able to make a decision about whether this is a direction you want to pursue. Copyright 2019, Eric Selje Page 2 of 32 Look at X Sharp! A Brief History of xBase In the beginning, there was Vulcan. Created in 1978 by Wayne Ratliff at JPL Laboratories to run his football pool, Vulcan was the ur-language of what would become the bread and butter of every developer who used any of its descendants.
    [Show full text]
  • Segmentation of Skin Lesions and Their Attributes Using Multi-Scale
    1 Segmentation of Skin Lesions and their Attributes Using Multi-Scale Convolutional Neural Networks and Domain Specific Augmentations Mostafa Jahanifar*, Neda Zamani Tajeddin*, Navid Alemi Koohbanani*, Ali Gooya, and Nasir Rajpoot Abstract—Computer-aided diagnosis systems for classification task) from the lesion, to finally decide about the type of of different type of skin lesions have been an active field of skin lesions (classification task). In this framework, precise research in recent decades. It has been shown that introducing le- segmentation of lesion boundary is a critical task which can sions and their attributes masks into lesion classification pipeline can greatly improve the performance. In this paper, we propose lead to representative features to differentiate between normal a framework by incorporating transfer learning for segmenting and malignant lesions. lesions and their attributes based on the convolutional neural Lesions attributes, also known as dermoscopic structures, networks. The proposed framework is based on the encoder- are meaningful visual patterns in the skin lesion texture. Each decoder architecture which utilizes a variety of pre-trained of them represents a specific diagnostic symptom, and based networks in the encoding path and generates the prediction map by combining multi-scale information in decoding path using a on the lesion type and malignancy severity their appearance pyramid pooling manner. To address the lack of training data and may change [5]. Some lesions may not contain any specific increase the proposed model generalization, an extensive set of dermoscopic pattern while some may include textural pattern novel domain-specific augmentation routines have been applied related to several attributes.
    [Show full text]