Selecting C# Profiling Tools

Total Page:16

File Type:pdf, Size:1020Kb

Selecting C# Profiling Tools Bachelor’s thesis Information and Communications Technology 2019 Aleksandr Osipov SELECTING C# PROFILING TOOLS BACHELOR’S THESIS | ABSTRACT TURKU UNIVERSITY OF APPLIED SCIENCES Bachelor of Engineering, Information and Communications Technology Degree programme 2019 | 56 Aleksandr Osipov SELECTING C# PROFILING TOOLS The usage of profiling tools could certainly be beneficial for game development since it helps to identify performance bottlenecks. However, the number of available profilers is high and can cause frustration among developers. The objective of this thesis is to research the most recommended profilers and determine the best one based on following criteria: affordability, learnability, intuitive UI, optimized performance, deep analysis, and customizability. The investigation was carried out on Redgate ANTS memory and performance profilers, namely, the CodeTrack, JetBrains dotMemory and dotTrace profilers and the built-in Visual Studio profilers. As a target for testing, the game Barotrauma was used, which was developed in cooperation with FakeFish ltd and Undertow Games. In order to ensure that all profilers have similar conditions, the requirements were to play the game in single player for 10 to 30 minutes, encounter at least one monster attack and experience one breach of the submarine. This thesis investigates all profiler findings and assesses them according to the six aforementioned criteria, based on the author’s own user experience. The results show that built-in Visual Studio profilers have the highest grades. JetBrains and CodeTrack are tied for second place, considering JetBrains is more user-friendly and performant, while CodeTrack is a fully free software. ANTS profilers take the last place; nevertheless, they are helpful in optimization matters. This thesis offers advice on selecting the right profiling tool for game development companies and makes a small practical contribution on optimization of future games. KEYWORDS: Profiler, performance, C#, .NET framework, software development CONTENTS LIST OF ABBREVIATIONS 5 1 INTRODUCTION 6 2 CURRENT PROFILING APPROACHES AND TOOLS 8 2.1 Testing approaches 8 2.2 Testing levels and types 9 3 PROFILERS AND METHODS 12 3.1 The most common profilers include: 12 3.2 Methods 13 3.2.1 ANTS 13 3.2.2 CodeTrack 24 3.2.3 JetBrains 31 3.2.4 Visual Studio profiler 41 4 RESULTS AND DISCUSSION 50 5 CONCLUSION 55 REFERENCES 56 FIGURES Figure 1. Memory profiler main menu. 14 Figure 2. Memory profiler configuration. 15 Figure 3. Memory profiler results. 16 Figure 4. Memory profiler class list. 17 Figure 5. Memory profiler instance categorizer. 18 Figure 6. Performance profiler main menu. 19 Figure 7. Performance profiler configuration. 19 Figure 8. Performance profiler results. 20 Figure 9. Performance profiler results options. 21 Figure 10. Performance profiler low profiling overhead mode. 22 Figure 11. Performance profiler lowest profiling overhead mode. 23 Figure 12. CodeTrack main menu. 24 Figure 13. CodeTrack configuration. 25 Figure 14. CodeTrack sampling profiling option. 26 Figure 15. CodeTrack tracing profiling option. 27 Figure 16. CodeTrack deep trace profiling option. 27 Figure 17. CodeTrack results. 28 Figure 18. CodeTrack results in flame view. 29 Figure 19. CodeTrack results in list view. 29 Figure 20. CodeTrack results in timeline view. 30 Figure 21. dotMemory main menu. 31 Figure 22. dotMemory results. 32 Figure 23. dotMemory snapshot comparison. 33 Figure 24. dotMemory memory traffic. 33 Figure 25. dotMemory single snapshot. 34 Figure 26. dotTrace main menu. 35 Figure 27. dotTrace control panel. 36 Figure 28. dotTrace sampling snapshots. 37 Figure 29. dotTrace results. 37 Figure 30. dotTrace tracing snapshots. 38 Figure 31. dotTrace tracing results. 39 Figure 32. dotTrace tracing results in hot spots view. 39 Figure 33. dotTrace timeline results. 40 Figure 34. Visual Studio Diagnostic tools, CPU. 42 Figure 35. Visual Studio Diagnostic tools, Memory. 43 Figure 36. Visual Studio Diagnostic tools memory results. 44 Figure 37. Visual Studio Diagnostic tools CPU profiling results. 44 Figure 38. Visual Studio profiler target options. 45 Figure 39. Visual Studio profiler options. 46 Figure 40. Visual Studio profiler memory snapshots. 47 Figure 41. Visual Studio profiler memory snapshot data. 47 Figure 42. Visual Studio profiler CPU snapshot data. 48 Figure 43. Visual Studio profiler CPU call chain. 49 TABLES Table 1. Profiler comparison. 54 LIST OF ABBREVIATIONS CLR Common language runtime CPU Central processing unit GC Garbage collection GPU Graphics processing unit IDE Integrated development environment IIS Internet information services JIT Just-in-time RAM Random access memory UI User interface 6 1 INTRODUCTION Scheduled profiling in software development process increases the chance of enhancing slow sections of code (Bertolino & Faedo, 2007, p. 4). It is important to choose a reliable and convenient profiler for a profiling routine. The usage of a performance profiler will guide developers through resource-demanding sections of code, highlighting issues and potential improvements. To achieve an optimized product, performance analysis is advised (Ammann and Offutt 2008, pp. 3-4). Developers can tackle the problem by simply viewing the code, which is a very time- consuming and low efficiency method, or developers can use help of available profilers (Dolan & Moré, 2002, p. 1). “Performance profilers are software development tools designed to help you analyze the performance of your applications and improve poorly performing sections of code.” (SmartBear 2019) Performance analysis is part of software testing and forms part of the ANSI/IEEE 1059 software testing standard, which reads: “…a technique to validate application. The definition of testing is that testing is the process of analysing a software item to detect the differences between existing and required conditions (that is defects/errors/bugs) and to evaluate the features of the software item. The purpose of testing is verification, validation and error detection in order to find problems – and the purpose of finding those problems is to get them fixed.” There are two main types of software testing: functional and non-functional (Hailpern and Santhanam 2010, pp. 9-10). Each consists of subtypes whose purpose is to assess the system's compliance with its specified requirements in functional types and test a software for the requirements which are nonfunctional in nature but important such as performance, security, user interface etc. Method, used for most tests, includes test groups with isolated environment and limited knowledge about software, and test specialists with given requirements. For performance test, it is compulsory to have software to test performance impact. Nowadays there are so many options and this creates confusion among developers. The problem, discussed in this thesis, is how to choose the most relevant and trustful profiler. TURKU UNIVERSITY OF APPLIED SCIENCES THESIS | Aleksandr Osipov 7 The next chapter, Chapter 2 explains the current methods the software testing is performed. Each approach, level and type will be described in detail, without diverting from the main topic, which is a part of software performance testing. Chapter 3 describes the most recommended profilers, among different online resources. It also introduces existing problems and solutions alongside with methods, used to solve the problems and find optimal profiler. TURKU UNIVERSITY OF APPLIED SCIENCES THESIS | Aleksandr Osipov 8 2 CURRENT PROFILING APPROACHES AND TOOLS Profiling is a part of software testing. Many approaches exist in software testing, for example: static and dynamic approach, exploratory approach, white, grey and black box approach etc. Among the different approaches, there is a minimum of three distinctive levels of testing: unit testing, integration testing and system testing, and many software testing types or techniques such as compatibility, smoke and sanity, functional and non- functional testing. 2.1 Testing approaches Static testing is a manual or automated review of code to find errors at the early stage of development and it is carried out when the code is not executed, in contrast with dynamic testing where code is executed to determine resource usage, overall performance and confirm that software meets business requirements (Pan 1999). Exploratory testing is an important approach for agile projects (Jorgensen and Jorgensen 2006), because its aim to keep testers on the same page with developers of a fast evolving project. It emphasizes the engagement of testers, the lack of plan and freedom to choose the path for testing, only using one’s own sense of where the problems might lie. White, grey and black box approaches regulate the openness of software source code for testers. White box testing is completely open, also called glass box, transparent box, etc., so testers have access to source code and design documents, to help create test cases using exposed internal structure and systems. Black box testing implies a closed code base with only input and output data available for testers. The grey box approach is a combination of white and black box, which means that the testers have limited knowledge of the testing system such as working models and architecture diagram, but generally have detailed design documents available. The white box approach is commonly used at unit level although it can be applied at integration and system levels. Black box testing is applicable to any level of testing.
Recommended publications
  • Ironpython in Action
    IronPytho IN ACTION Michael J. Foord Christian Muirhead FOREWORD BY JIM HUGUNIN MANNING IronPython in Action Download at Boykma.Com Licensed to Deborah Christiansen <[email protected]> Download at Boykma.Com Licensed to Deborah Christiansen <[email protected]> IronPython in Action MICHAEL J. FOORD CHRISTIAN MUIRHEAD MANNING Greenwich (74° w. long.) Download at Boykma.Com Licensed to Deborah Christiansen <[email protected]> For online information and ordering of this and other Manning books, please visit www.manning.com. The publisher offers discounts on this book when ordered in quantity. For more information, please contact Special Sales Department Manning Publications Co. Sound View Court 3B fax: (609) 877-8256 Greenwich, CT 06830 email: [email protected] ©2009 by Manning Publications Co. All rights reserved. No part of this publication may be reproduced, stored in a retrieval system, or transmitted, in any form or by means electronic, mechanical, photocopying, or otherwise, without prior written permission of the publisher. Many of the designations used by manufacturers and sellers to distinguish their products are claimed as trademarks. Where those designations appear in the book, and Manning Publications was aware of a trademark claim, the designations have been printed in initial caps or all caps. Recognizing the importance of preserving what has been written, it is Manning’s policy to have the books we publish printed on acid-free paper, and we exert our best efforts to that end. Recognizing also our responsibility to conserve the resources of our planet, Manning books are printed on paper that is at least 15% recycled and processed without the use of elemental chlorine.
    [Show full text]
  • Thriving in a Crowded and Changing World: C++ 2006–2020
    Thriving in a Crowded and Changing World: C++ 2006–2020 BJARNE STROUSTRUP, Morgan Stanley and Columbia University, USA Shepherd: Yannis Smaragdakis, University of Athens, Greece By 2006, C++ had been in widespread industrial use for 20 years. It contained parts that had survived unchanged since introduced into C in the early 1970s as well as features that were novel in the early 2000s. From 2006 to 2020, the C++ developer community grew from about 3 million to about 4.5 million. It was a period where new programming models emerged, hardware architectures evolved, new application domains gained massive importance, and quite a few well-financed and professionally marketed languages fought for dominance. How did C++ ś an older language without serious commercial backing ś manage to thrive in the face of all that? This paper focuses on the major changes to the ISO C++ standard for the 2011, 2014, 2017, and 2020 revisions. The standard library is about 3/4 of the C++20 standard, but this paper’s primary focus is on language features and the programming techniques they support. The paper contains long lists of features documenting the growth of C++. Significant technical points are discussed and illustrated with short code fragments. In addition, it presents some failed proposals and the discussions that led to their failure. It offers a perspective on the bewildering flow of facts and features across the years. The emphasis is on the ideas, people, and processes that shaped the language. Themes include efforts to preserve the essence of C++ through evolutionary changes, to simplify itsuse,to improve support for generic programming, to better support compile-time programming, to extend support for concurrency and parallel programming, and to maintain stable support for decades’ old code.
    [Show full text]
  • The Following Documentation Is an Electronically‐ Submitted Vendor Response to an Advertised Solicitation from the West
    The following documentation is an electronically‐ submitted vendor response to an advertised solicitation from the West Virginia Purchasing Bulletin within the Vendor Self‐Service portal at wvOASIS.gov. As part of the State of West Virginia’s procurement process, and to maintain the transparency of the bid‐opening process, this documentation submitted online is publicly posted by the West Virginia Purchasing Division at WVPurchasing.gov with any other vendor responses to this solicitation submitted to the Purchasing Division in hard copy format. Purchasing Division State of West Virginia 2019 Washington Street East Solicitation Response Post Office Box 50130 Charleston, WV 25305-0130 Proc Folder : 702868 Solicitation Description : Addendum No 2 Supplemental Staffing for Microsoft Applicatio Proc Type : Central Contract - Fixed Amt Date issued Solicitation Closes Solicitation Response Version 2020-06-10 SR 1300 ESR06092000000007338 1 13:30:00 VENDOR VS0000020585 Cambay Consulting LLC Solicitation Number: CRFQ 1300 STO2000000002 Total Bid : $370,750.00 Response Date: 2020-06-09 Response Time: 09:51:40 Comments: FOR INFORMATION CONTACT THE BUYER Melissa Pettrey (304) 558-0094 [email protected] Signature on File FEIN # DATE All offers subject to all terms and conditions contained in this solicitation Page : 1 FORM ID : WV-PRC-SR-001 Line Comm Ln Desc Qty Unit Issue Unit Price Ln Total Or Contract Amount 1 Temporary information technology 2000.00000 HOUR $72.170000 $144,340.00 software developers Comm Code Manufacturer Specification
    [Show full text]
  • Cornell CS6480 Lecture 3 Dafny Robbert Van Renesse Review All States
    Cornell CS6480 Lecture 3 Dafny Robbert van Renesse Review All states Reachable Ini2al states states Target states Review • Behavior: infinite sequence of states • Specificaon: characterizes all possible/desired behaviors • Consists of conjunc2on of • State predicate for the inial states • Acon predicate characterizing steps • Fairness formula for liveness • TLA+ formulas are temporal formulas invariant to stuering • Allows TLA+ specs to be part of an overall system Introduction to Dafny What’s Dafny? • An imperave programming language • A (mostly funconal) specificaon language • A compiler • A verifier Dafny programs rule out • Run2me errors: • Divide by zero • Array index out of bounds • Null reference • Infinite loops or recursion • Implementa2ons that do not sa2sfy the specifica2ons • But it’s up to you to get the laFer correct Example 1a: Abs() method Abs(x: int) returns (x': int) ensures x' >= 0 { x' := if x < 0 then -x else x; } method Main() { var x := Abs(-3); assert x >= 0; print x, "\n"; } Example 1b: Abs() method Abs(x: int) returns (x': int) ensures x' >= 0 { x' := 10; } method Main() { var x := Abs(-3); assert x >= 0; print x, "\n"; } Example 1c: Abs() method Abs(x: int) returns (x': int) ensures x' >= 0 ensures if x < 0 then x' == -x else x' == x { x' := 10; } method Main() { var x := Abs(-3); print x, "\n"; } Example 1d: Abs() method Abs(x: int) returns (x': int) ensures x' >= 0 ensures if x < 0 then x' == -x else x' == x { if x < 0 { x' := -x; } else { x' := x; } } Example 1e: Abs() method Abs(x: int) returns (x': int) ensures
    [Show full text]
  • Neufuzz: Efficient Fuzzing with Deep Neural Network
    Received January 15, 2019, accepted February 6, 2019, date of current version April 2, 2019. Digital Object Identifier 10.1109/ACCESS.2019.2903291 NeuFuzz: Efficient Fuzzing With Deep Neural Network YUNCHAO WANG , ZEHUI WU, QIANG WEI, AND QINGXIAN WANG China National Digital Switching System Engineering and Technological Research Center, Zhengzhou 450000, China Corresponding author: Qiang Wei ([email protected]) This work was supported by National Key R&D Program of China under Grant 2017YFB0802901. ABSTRACT Coverage-guided graybox fuzzing is one of the most popular and effective techniques for discovering vulnerabilities due to its nature of high speed and scalability. However, the existing techniques generally focus on code coverage but not on vulnerable code. These techniques aim to cover as many paths as possible rather than to explore paths that are more likely to be vulnerable. When selecting the seeds to test, the existing fuzzers usually treat all seed inputs equally, ignoring the fact that paths exercised by different seed inputs are not equally vulnerable. This results in wasting time testing uninteresting paths rather than vulnerable paths, thus reducing the efficiency of vulnerability detection. In this paper, we present a solution, NeuFuzz, using the deep neural network to guide intelligent seed selection during graybox fuzzing to alleviate the aforementioned limitation. In particular, the deep neural network is used to learn the hidden vulnerability pattern from a large number of vulnerable and clean program paths to train a prediction model to classify whether paths are vulnerable. The fuzzer then prioritizes seed inputs that are capable of covering the likely to be vulnerable paths and assigns more mutation energy (i.e., the number of inputs to be generated) to these seeds.
    [Show full text]
  • Simple Talk Newsletter, 14Th May 2012
    What Counts For a DBA: Imagination Published Thursday, May 10, 2012 10:36 PM "Imagination…One little spark, of inspiration… is at the heart, of all creation." – From the song "One Little Spark", by the Sherman Brothers I have a confession to make. Despite my great enthusiasm for databases and programming, it occurs to me that every database system I've ever worked on has been, in terms of its inputs and outputs, downright dull. Most have been glorified e-spreadsheets, many replacing manual systems built on actual spreadsheets. I've created a lot of database-driven software whose main job was to "count stuff"; phone calls, web visitors, payments, donations, pieces of equipment and so on. Sometimes, instead of counting stuff, the database recorded values from other stuff, such as data from sensors or networking devices. Yee hah! So how do we, as DBAs, maintain high standards and high spirits when we realize that so much of our work would fail to raise the pulse of even the most easily excitable soul? The answer lies in our imagination. To understand what I mean by this, consider a role that, in terms of its output, offers an extreme counterpoint to that of the DBA: the Disney Imagineer. Their job is to design Disney's Theme Parks, of which I'm a huge fan. To me this has always seemed like a fascinating and exciting job. What must an Imagineer do, every day, to inspire the feats of creativity that are so clearly evident in those spectacular rides and shows? Here, if ever there was one, is a role where "dull moments" must be rare indeed, surely? I wanted to find out, and so parted with a considerable sum of money for my wife and I to have lunch with one; I reasoned that if I found one small way to apply their secrets to my own career, it would be money well spent.
    [Show full text]
  • Intel® Software Guard Extensions: Data Center Attestation Primitives
    Intel® Software Guard Extensions Data Center Attestation Primitives Installation Guide For Windows* OS Revision <1.0> <3/10/2020> Table of Contents Introduction .......................................................................................................................... 3 Components – Detailed Description ....................................................................................... 4 Platform Configuration .......................................................................................................... 6 Windows* Server OS Support ................................................................................................. 7 Installation Instructions ......................................................................................................... 8 Windows* Server 2016 LTSC ................................................................................................................. 8 Downloading the Software ........................................................................................................................... 8 Installation .................................................................................................................................................... 8 Windows* Server 2019 Installation ....................................................................................................... 9 Downloading the Software ........................................................................................................................... 9 Installation
    [Show full text]
  • Fine-Grained Energy Profiling for Power-Aware Application Design
    Fine-Grained Energy Profiling for Power-Aware Application Design Aman Kansal Feng Zhao Microsoft Research Microsoft Research One Microsoft Way, Redmond, WA One Microsoft Way, Redmond, WA [email protected] [email protected] ABSTRACT changing from double precision to single), or quality of service pro- Significant opportunities for power optimization exist at applica- vided [10]. Third, energy usage at the application layer may be tion design stage and are not yet fully exploited by system and ap- made dynamic [8]. For instance, an application hosted in a data plication designers. We describe the challenges developers face in center may decide to turn off certain low utility features if the en- optimizing software for energy efficiency by exploiting application- ergy budget is being exceeded, and an application on a mobile de- level knowledge. To address these challenges, we propose the de- vice may reduce its display quality [11] when battery is low. This velopment of automated tools that profile the energy usage of vari- is different from system layer techniques that may have to throttle ous resource components used by an application and guide the de- the throughput resulting in users being denied service. sign choices accordingly. We use a preliminary version of a tool While many application specific energy optimizations have been we have developed to demonstrate how automated energy profiling researched, there is a lack of generic tools that a developer may use helps a developer choose between alternative designs in the energy- at design time. Application specific optimizations require signif- performance trade-off space. icant development effort and are often only applicable to specific scenarios.
    [Show full text]
  • Adding Self-Healing Capabilities to the Common Language Runtime
    Adding Self-healing capabilities to the Common Language Runtime Rean Griffith Gail Kaiser Columbia University Columbia University [email protected] [email protected] Abstract systems can leverage to maintain high system availability is to perform repairs in a degraded mode of operation[23, 10]. Self-healing systems require that repair mechanisms are Conceptually, a self-managing system is composed of available to resolve problems that arise while the system ex- four (4) key capabilities [12]; Monitoring to collect data ecutes. Managed execution environments such as the Com- about its execution and operating environment, performing mon Language Runtime (CLR) and Java Virtual Machine Analysis over the data collected from monitoring, Planning (JVM) provide a number of application services (applica- an appropriate course of action and Executing the plan. tion isolation, security sandboxing, garbage collection and Each of the four functions participating in the Monitor- structured exception handling) which are geared primar- Analyze-Plan-Execute (MAPE) loop consumes and pro- ily at making managed applications more robust. How- duces knowledgewhich is integral to the correct functioning ever, none of these services directly enables applications of the system. Over its execution lifetime the system builds to perform repairs or consistency checks of their compo- and refines a knowledge-base of its behavior and environ- nents. From a design and implementation standpoint, the ment. Information in the knowledge-base could include preferred way to enable repair in a self-healing system is patterns of resource utilization and a “scorecard” tracking to use an externalized repair/adaptation architecture rather the success of applying specific repair actions to detected or than hardwiring adaptation logic inside the system where it predicted problems.
    [Show full text]
  • Formalized Mathematics in the Lean Proof Assistant
    Formalized mathematics in the Lean proof assistant Robert Y. Lewis Vrije Universiteit Amsterdam CARMA Workshop on Computer-Aided Proof Newcastle, NSW June 6, 2019 Credits Thanks to the following people for some of the contents of this talk: Leonardo de Moura Jeremy Avigad Mario Carneiro Johannes Hölzl 1 38 Table of Contents 1 Proof assistants in mathematics 2 Dependent type theory 3 The Lean theorem prover 4 Lean’s mathematical libraries 5 Automation in Lean 6 The good and the bad 2 38 bfseries Proof assistants in mathematics Computers in mathematics Mathematicians use computers in various ways. typesetting numerical calculations symbolic calculations visualization exploration Let’s add to this list: checking proofs. 3 38 Interactive theorem proving We want a language (and an implementation of this language) for: Defining mathematical objects Stating properties of these objects Showing that these properties hold Checking that these proofs are correct Automatically generating these proofs This language should be: Expressive User-friendly Computationally eicient 4 38 Interactive theorem proving Working with a proof assistant, users construct definitions, theorems, and proofs. The proof assistant makes sure that definitions are well-formed and unambiguous, theorem statements make sense, and proofs actually establish what they claim. In many systems, this proof object can be extracted and verified independently. Much of the system is “untrusted.” Only a small core has to be relied on. 5 38 Interactive theorem proving Some systems with large
    [Show full text]
  • 1. with Examples of Different Programming Languages Show How Programming Languages Are Organized Along the Given Rubrics: I
    AGBOOLA ABIOLA CSC302 17/SCI01/007 COMPUTER SCIENCE ASSIGNMENT ​ 1. With examples of different programming languages show how programming languages are organized along the given rubrics: i. Unstructured, structured, modular, object oriented, aspect oriented, activity oriented and event oriented programming requirement. ii. Based on domain requirements. iii. Based on requirements i and ii above. 2. Give brief preview of the evolution of programming languages in a chronological order. 3. Vividly distinguish between modular programming paradigm and object oriented programming paradigm. Answer 1i). UNSTRUCTURED LANGUAGE DEVELOPER DATE Assembly Language 1949 FORTRAN John Backus 1957 COBOL CODASYL, ANSI, ISO 1959 JOSS Cliff Shaw, RAND 1963 BASIC John G. Kemeny, Thomas E. Kurtz 1964 TELCOMP BBN 1965 MUMPS Neil Pappalardo 1966 FOCAL Richard Merrill, DEC 1968 STRUCTURED LANGUAGE DEVELOPER DATE ALGOL 58 Friedrich L. Bauer, and co. 1958 ALGOL 60 Backus, Bauer and co. 1960 ABC CWI 1980 Ada United States Department of Defence 1980 Accent R NIS 1980 Action! Optimized Systems Software 1983 Alef Phil Winterbottom 1992 DASL Sun Micro-systems Laboratories 1999-2003 MODULAR LANGUAGE DEVELOPER DATE ALGOL W Niklaus Wirth, Tony Hoare 1966 APL Larry Breed, Dick Lathwell and co. 1966 ALGOL 68 A. Van Wijngaarden and co. 1968 AMOS BASIC FranÇois Lionet anConstantin Stiropoulos 1990 Alice ML Saarland University 2000 Agda Ulf Norell;Catarina coquand(1.0) 2007 Arc Paul Graham, Robert Morris and co. 2008 Bosque Mark Marron 2019 OBJECT-ORIENTED LANGUAGE DEVELOPER DATE C* Thinking Machine 1987 Actor Charles Duff 1988 Aldor Thomas J. Watson Research Center 1990 Amiga E Wouter van Oortmerssen 1993 Action Script Macromedia 1998 BeanShell JCP 1999 AngelScript Andreas Jönsson 2003 Boo Rodrigo B.
    [Show full text]
  • SQL+Comparison+SDK+10.Pdf
    1. SQL Comparison SDK 10 documentation . 2 1.1 Installing . 3 1.2 Licensing and distribution . 4 1.2.1 Licensing the SQL Comparison SDK . 5 1.2.2 Licensing for ASP.NET applications . 6 1.2.3 Distributing your SDK applications . 7 1.2.4 Licensing automated builds with NAnt . 8 1.2.5 Licensing SDK applications in Visual Studio 2010 . 11 1.2.6 Manually licensing Redgate assemblies . 12 1.3 Breaking changes in SQL Comparison SDK 10.5 . 13 1.4 Getting more from the SQL Comparsion SDK . 15 1.4.1 Creating an HTML report of schema differences in C# . 16 1.4.2 Creating an HTML report of schema differences in Visual Basic .NET . 23 1.4.3 Creating a deployment script without batch markers . 30 1.4.4 Running SQL code inside SQL Comparison SDK applications . 31 1.4.5 Using SQL Data Compare mappings in projects using the API . 32 1.4.6 Excluding a table from a data comparison . 35 1.4.7 Executing your own SQL queries together with SDK synchronization . 36 1.5 Troubleshooting . 39 1.5.1 Troubleshooting the SQL Comparison SDK . 40 1.5.2 'Error 1603' occurring during installation . 42 1.5.3 SQL Compare deployment error 'Full-Text Search is not installed' . 43 1.5.4 Application licensing invalidated by renaming assembly . 44 1.5.5 Compatibility of SQL Comparison SDK in 64-bit environments . 45 1.5.6 Licenses.licx is not a valid Win32 application . 46 1.6 Release notes and other versions . 47 1.6.1 SQL Comparison SDK 10.7 release notes .
    [Show full text]