<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns:MadCap="http://www.madcapsoftware.com/Schemas/MadCap.xsd" MadCap:lastBlockDepth="2" MadCap:lastHeight="120" MadCap:lastWidth="624" MadCap:disableMasterStylesheet="true" MadCap:tocPath="Tuning|Main Operations Performance|Query Performance" MadCap:InPreviewMode="false" MadCap:RuntimeFileType="Topic" MadCap:TargetType="WebHelp" MadCap:PathToHelpSystem="../../../../" MadCap:HelpSystemFileName="index.xml" MadCap:SearchType="Stem"> <head><title>Hardware Resources </title> <script type="text/javascript">/* <![CDATA[ */ window.onload = function(){ var pathToFlash = $('html').attr('MadCap:PathToHelpSystem') + 'Content/Resources/Code/ZeroClipboard.swf'; ZeroClipboard.setMoviePath(pathToFlash); function bindToClipBord(element,content){ var clip = new ZeroClipboard.Client(); clip.setText(content); clip.glue(element); }; if(location.protocol==='file:'){ $('.copylink-marker').remove(); } else{ $('.copylink-marker').each(function(){ var text = $(this).parent().parent().children('.prettyprint').html(); $(this).hover(function(){ bindToClipBord(this,text); }, function(){}); }); } prettyPrint(); }; /* ]]> */</script> <link href="../../../SkinSupport/MadCap.css" rel="stylesheet" /> <link href="../../../Resources/Stylesheets/OnlineStyle.css" rel="stylesheet" /> <script src="../../../Resources/Code/prettify.js"> </script> <script src="../../../Resources/Code/lang-vb.js"> </script> <script src="../../../Resources/Code/jquery.min.js"> </script> <script src="../../../Resources/Code/ZeroClipboard.js"> </script> <script src="../../../SkinSupport/MadCapAll.js" type="text/javascript"> </script> </head> <body> <p class="MCWebHelpFramesetLink" style="display: none;"><a href="../../../../index_CSH.html#tuning/main_operations_performance/query_performance/hardware_resources.htm" style="">Open topic with navigation</a> </p> <div class="MCBreadcrumbsBox"><span class="MCBreadcrumbsPrefix">You are here: </span><a class="MCBreadcrumbsLink" href="../../../tuning.htm">Tuning</a><span class="MCBreadcrumbsDivider"> > </span><a class="MCBreadcrumbsLink" href="../../main_operations_performance.htm">Main Operations Performance</a><span class="MCBreadcrumbsDivider"> > </span><a class="MCBreadcrumbsLink" href="../query_performance.htm">Query Performance</a><span class="MCBreadcrumbsDivider"> > </span><span class="MCBreadcrumbs">Hardware Resources</span> </div> <p> <script type="text/javascript">/*<![CDATA[*/document.write('<a href="' + location.href +'">'); document.write("Direct Link"); document.write('</a>');/*]]>*/</script> </p> <p> </p> <h1>Hardware Resources</h1> <p>Effective querying requires enough operating memory and quick hard drive access. Hard drive access time is important as the object will be read from the physical location into the operating memory. However, hard drive speed is not so critical for querying as it is for <a href="../insert_performance.htm">inserting</a>.</p> <p>The following test uses a RAM drive to compare test results with the hard drive:</p> <p MadCap:conditions="Global.Primary:java" /> <p MadCap:conditions="Primary..NET"> <pre class="prettyprint" xml:space="preserve">QueryPerformanceBenchmark.cs: RunRamDiskTest private void RunRamDiskTest() { InitForHardDriveTest(); Clean(); System.Console.WriteLine("Storing " + _count + " objects of depth " + _depth + " on a hard drive:"); Open(ConfigureRamDrive()); Store(); Close(); Open(ConfigureRamDrive()); StartTimer(); IQuery query = objectContainer.Query(); query.Constrain(typeof(Item)); query.Descend("_name").Constrain("level1/1"); Item item = (Item)query.Execute().Next(); StopTimer("Select 1 object: " + item._name); Close(); InitForRamDriveTest(); Clean(); System.Console.WriteLine("Storing " + _count + " objects of depth " + _depth + " on a RAM disk:"); Open(ConfigureRamDrive()); Store(); Close(); Open(ConfigureRamDrive()); StartTimer(); query = objectContainer.Query(); query.Constrain(typeof(Item)); query.Descend("_name").Constrain("level1/1"); item = (Item)query.Execute().Next(); StopTimer("Select 1 object: " + item._name); Close(); }</pre> <pre class="prettyprint" xml:space="preserve">QueryPerformanceBenchmark.cs: InitForHardDriveTest private void InitForHardDriveTest() { _count = 10000; _depth = 3; _filePath = "performance.db4o"; _isClientServer = false; }</pre> <pre class="prettyprint" xml:space="preserve">QueryPerformanceBenchmark.cs: ConfigureRamDrive private IConfiguration ConfigureRamDrive() { IConfiguration config = Db4oFactory.NewConfiguration(); config.FlushFileBuffers(true); return config; }</pre> </p> <p MadCap:conditions="Global.Primary:net" /> <p>Test results:</p> <p><i>Storing 30000 objects of depth 3 on a hard drive:</i> </p> <p><i>Store 90000 objects: 6019ms</i> </p> <p><i>Select 1 object: level1/1: 1515ms</i> </p> <p><i>Storing 30000 objects of depth 3 on a RAM disk:</i> </p> <p><i>Store 90000 objects: 5264ms</i> </p> <p><i>Select 1 object: level1/1: 1518ms</i> </p> <p>You can see that the difference in query performance is negligible.</p> <p MadCap:conditions="Primary.Online">Download example code:</p> <p MadCap:conditions="Primary.Online"> <MadCap:conditionalText MadCap:conditions="Primary..NET,Primary.c#,Primary.All languages"><a href="queryperformancecs.zip">c# </a> </MadCap:conditionalText> </p> <script type="text/javascript" src="../../../SkinSupport/MadCapBodyEnd.js"> </script> </body> </html>