Search Results

Search found 47655 results on 1907 pages for 'system restore'.

Page 423/1907 | < Previous Page | 419 420 421 422 423 424 425 426 427 428 429 430  | Next Page >

  • Time Synch Architecture in Windows Domain Environment

    - by Param
    I just read the following article -- "In a domain, time synchronization takes place when Windows Time Service turns on during system startup and periodically while the system is running." ( http://technet.microsoft.com/en-us/library/cc779145%28v=ws.10%29.aspx ) From the above article i get to know that the first sync it take as soon as i start my system, but after that in how many minutes or second or in how many periodic interval my windows client ( Window XP, window7 or window server 2008 member ) synch with my Domain controller (PDC emulator )??? Do you have any idea, and how should i verify my synch time interval? My Domain Controller is Window server 2008 R2 Standard

    Read the article

  • High CPU Steal percentage on Amazon EC2 Instance

    - by Aditya Patawari
    I am experiencing high CPU steal percentage in a Amazon EC2 large instance. I know it means that my virtual CPU is waiting on the real CPU of the machine for time. My question is that what can I do to reduce this percentage and get maximum out of the CPU? Steal percentage is consistently at 20%. System load crosses 10 when this happens. I have checked memory and network and I am sure that they are not the bottleneck. Is that normal for such environment? Also are there any system level optimization techniques for reducing steal percentage form the virtual instance? avg-cpu: %user %nice %system %iowait %steal %idle 52.38 0.00 8.23 0.00 21.21 18.18

    Read the article

  • What's the best way to install mod-wsgi for a specific version of python (2.7) on Debian (squeeze)?

    - by Pascal Polleunus
    System info: Debian Squeeze Python versions: 2.6.6 (default) & 2.7.2 mod-wsgi: 3.3-2 in /usr/lib/apache2/modules: mod_wsgi.so -> mod_wsgi.so-2.6 mod_wsgi.so-2.5 mod_wsgi.so-2.6 I've a virtualenv configured with Python 2.7 but my application runs 2.6.6, apparently because mod-wsgi is using the default version of the system. The way to go seems to configure mod-wsgi to use 2.7 (i.e. system-wide, not specific to a virtualenv). How can I install mod_wsgi.so-2.7? After installing that, I'll just have to change the symlink mod_wsgi.so to mod_wsgi.so-2.7.

    Read the article

  • PATH env variable on Mac OS X and/or Eclipse

    - by Jason S
    When I print out the path in bash, it prints this: /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin When I run System.out.println(System.getenv("PATH")); in Java running under Eclipse, it prints /usr/bin:/bin:/usr/sbin:/sbin How can I figure out why there is this discrepancy? I need to add /usr/local/bin to the PATH and make it available to Java apps under Eclipse. (note: I have made no modifications system paths, so these are the defaults set by the OS or perhaps by one or more of the applications i've installed.)

    Read the article

  • Missing files when Windows 7 returns from hibernate w/ dual boot

    - by Arthur N
    I have a dual-boot setup with Ubuntu (lucid) and Windows 7. I have the Windows file system shared on Ubuntu through Samba. Occasionally, I am working on Windows and my machine will go into hibernate (i.e. when the battery level is critical). By default, my GRUB settings boot me into Ubuntu. So when I get back to my PC, sometimes I just hop into Ubuntu instead of going back to Windows. However, if I write any files to the Windows file system during that Ubuntu session, the next time I do go back to Windows (which resumes from hibernate), those files are missing. Obviously, the state of the actual file system and the hibernate snapshot become out of sync, and Windows chooses the hibernate snapshot, overriding any changes I may have made thru Ubuntu. For now, I've disabled the hibernate option in the Windows power settings, but is there any utility I can use to get back some of those missing files?

    Read the article

  • Missing time zones in OSX and Windows

    - by pellepim
    I am working on a javascript to automatically detect a user's timezone (https://bitbucket.org/pellepim/jstimezonedetect/). But there are two timezones that I have a really hard time to test, since I can not set my system to observe these timezones. The timezones I am talking about are UTC+1245 (Chatham Islands, NZ) and UTC+0845 (Australia/Eucla). As far as I can tell in OSX (Snow Leopard) and in Windows 7 these timezones do not exist as a setting. Granted, very few people live in these areas, and it might just not be worth it. Does anyone know of a way to set these timezones on a system level? In any operating system? If it is not possible in a trivial way, what do people who live in these areas do to get their systems working as they would like?

    Read the article

  • Missing files when Windows 7 returns from hibernate w/ dual boot

    - by Arthur N
    I have a dual-boot setup with Ubuntu (lucid) and Windows 7. I have the Windows file system shared on Ubuntu through Samba. Occasionally, I am working on Windows and my machine will go into hibernate (i.e. when the battery level is critical). By default, my GRUB settings boot me into Ubuntu. So when I get back to my PC, sometimes I just hop into Ubuntu instead of going back to Windows. However, if I write any files to the Windows file system during that Ubuntu session, the next time I do go back to Windows (which resumes from hibernate), those files are missing. Obviously, the state of the actual file system and the hibernate snapshot become out of sync, and Windows chooses the hibernate snapshot, overriding any changes I may have made thru Ubuntu. For now, I've disabled the hibernate option in the Windows power settings, but is there any utility I can use to get back some of those missing files?

    Read the article

  • ionice idle is ignored

    - by Ferran Basora
    I have been testing the ionice command for a while and the idle (3) mode seems to be ignored in most cases. My test is to run both command at the same time: du <big folder> ionice -c 3 du <another big folder> If I check both process in iotop I see no difference in the percentage of io utilization for each process. To provide more information about the CFQ scheduler I'm using a 3.5.0 linux kernel. I started doing this test because I'm experimenting a system lag each time a daily cron job updatedb.mlocate is executed in my Ubuntu 12.10 machine. If you check the /etc/cron.daily/mlocate file you realize that the command is executed like: /usr/bin/ionice -c3 /usr/bin/updatedb.mlocate Also, the funny thing is that whenever my system for some reason starts using swap memory, the updatedb.mlocate io process is been scheduled faster than kswapd0 process, and then my system gets stuck. Some suggestion? References: http://ubuntuforums.org/showthread.php?t=1243951&page=2 https://bugs.launchpad.net/ubuntu/+source/findutils/+bug/332790

    Read the article

  • windows 7 partition disappeared

    - by atoMerz
    I have a VPCF2 with windows 7 installed on it. I was working on my computer when on of my drives (D) disappeared. I can see it in Computer Management>Disk Management and it'd marked as Healthy(Primary Partition). When I right click on it the only options that are enabled are Delete Volume and Help. So I cannot assign a drive letter to it (not even in safe mode). I tried System Restore and it failed. I tried to boot the system using ubuntu tha was installed on my system but that fails too because it was installed on partition D. I'm hopeless. What can I do?

    Read the article

  • How to output to S-Video on Windows XP in single-monitor mode (clone display)?

    - by Jephir
    I am using an IBM ThinkPad T30 running Windows XP. It is connected to a TV system via S-Video output. Windows is currently set up in multi-monitor mode with monitor 2 being output to S-Video. However, since there is no preview monitor, I can't interact with anything I drag to monitor 2 as I can't see it. I would rather have the system set up so that there is only one monitor and the output is cloned to the laptop display and S-Video. This allows me to see what I'm doing on the TV system. Is this possible?

    Read the article

  • What data should I (can I) gather to prove a .net bug in third party software?

    - by gef05
    Our users are using a third-party system and every so often - a user might go all day without this happening, other days they may see it two or three times in seven hours - a red x will appear on screen rather than a button, field, or control. This is a .net system. Looking online I can see that this is a .net error. Problem is, our devs didn't write it, and the vendor wants proof that the problem resides with their system, not our PCs. What can we do to gather information on such an issue that would allow us to make our case to the vendor and get them to create a fix? I'm thinking of data to gather - anything from OS, memory. .net version installed etc. But I'd also like to know about error logging - if it's possible to log errors that occur in third-party systems.

    Read the article

  • OS Isolation: Virtualization or Dual-Boot Duplication, a General How To?

    - by Mr_CryptoPrime
    I want to isolate my windows 7 operating system and I have looked into virtualization. This should work with Linux, however, I do want to still have a way to run windows 7 securely, but without significant performance loss, thus eliminating virtualization for that. I know that you can dual boot because I currently do so with my XP/Linux system. Is there a way that I can duplicate my windows 7 system so I can select one at bootup? This way I can ensure that each OS is isolated and not worry about performance loss. However, I am having a lot of trouble finding a solid method for OS duplication?! Is this even possible or must I buy two versions of win7 and somehow install them separately? Any information regarding this would be helpful, thanks! Essentially I want, Two instances of win7 (not necessarily simultaneously running) Each are isolated from one another so that a security breach in one doesn't affect the other. There is no performance loss in either from doing so

    Read the article

  • What PowerShell/WSMan clients or queries are consuming more than 1000 requests per 2 seconds?

    - by makerofthings7
    Exchange 2010 remote administration tools are complaining with the following error [txexmb02.ibm.com] Connecting to remote server failed with the following error message : The WS-Management service cannot process the request. The system load quota of 1000 requests per 2 seconds has been exceeded. Send future requests at a slower rate or raise the system quota. The next request from this user will not be approved for at least 558475776 milliseconds. For more information, see the about_Remote_Troubleshooting Help topic. + CategoryInfo : OpenError: (System.Manageme....RemoteRunspace:RemoteRunspace) [], PSRemotingTransportException + FullyQualifiedErrorId : PSSessionOpenFailed VERBOSE: Connecting to TXEXHC02.ibm.com The help document this error referrers to says this is a WS-Man error. We're running SCOM 2007 R2 and am thinking that is increasing the query count, but I need to prove it.

    Read the article

  • Why can't I use %USERPROFILE% in %PATH%?

    - by Zano
    On my Windows 7 machine, using the System Properties Environment Variables tool, I try to add %USERPROFILE%\Bin to the system variable PATH. For some reason, that doesn't work, even though %SystemRoot%\system32 works fine. When I try to run commands from the console, files in my Bin folder are not found, even though files in the System32 folder are found. The only difference between UserProfile and SystemRoot that I can see is that the former is a user variable while the latter is a system variable. I i write echo %USERPROFILE%\Bin it yields c:\Users\zano, and if I add c:\Users\zano\Bin explicitly, everything work fine. What's the problem here?

    Read the article

  • Disabling the shell of user "daemon" (/bin/false)

    - by BurninLeo
    on a Linux system there are lot's of users by default: daemon, bin, sys, games, etc. According to my /etc/passwd most of these users have a shell assigned (/bin/sh) which seems some kind of insecure to me. My naive thinking would say: Only give those users a shell that may login to the server. Is my thinking wrong? If not completely wrong: Can I disable the shell for "daemon" and "www-data" without having side effects (e.g. the system wont start or the Apache PHP cannot excute system calls)? Thanks for your hints!

    Read the article

  • Tomcat Apache not working on Win7

    - by Javanator
    I have installed Tomcat Apache 6.0 onto my system after downloading it from http://tomcat.apache.org/download-55.cgi using the Windows installer I install the system. But after successful installation the service doesn't start. Stating an error like follows: Windows could not start the Apache tomcat on Local Computer, For More Information, review the System Event Log. If this is a non microsoft service, contact the service vendor, and refer to the service specific error code 0 I then try to install the same installer on Win XP and it worked. Don't know how to resolve this problem and how to get it started on Win7. Any help would be appreciated. Thank you.

    Read the article

  • Applications on my laptop crashees every 10-20 minutes [closed]

    - by user1731110
    In my windows 7 home premium, several of my application crashes after some minutes even wehn I am not touching system. For example I have outlook 2007, that works fine, but suddenly crashes. The same about visual studio 2012. It is also crashes after some minute no matter if I am working on a project or I am not touching it. the same behaviour is there, for other applications (skype, oovoo and ...). I use Microsoft security essential and there is no virus on my system. I also checked my system with Sophos anti root kit and there is no root kit there. What would be the problem?

    Read the article

  • RHEL 6 x64: running 32 bit applications

    - by user54614
    We develop an application which currently works in 32 bit mode only. It worked fine in RHEL 5 but failed to work in RHEL 6. The reason is RHEL 6 by default is installed with 64 bit libraries only. Moreover, we didn't find a way to choose installation of 32bit runtime environment during or after system installation. Of course, we did find a way to install three rpm packages with 32 bit libraries required for our application to work. But it looks like unpleasant for our customers (we have to install three rpms from the DVD in the command line). So the question is: Is there a convenient way for RHEL 6 customers to install 32 bit libraries it their RHEL 6 system? Say, any user-friendly item in menu or a special command that install the same set of 32 bit system libraries that existed in RHEL 5? What are best practicies in such cases?

    Read the article

  • We have a Solaris 9 server running Oracle 10G and have been getting memory consumption errors for a few weeks now

    - by another_netadmin
    We recently upgraded our Enterprise application and everything worked ok until one weekend when we did a server reboot, ever since then we have run into memory errors. The server has 4GB of physical memory installed and the kernel parameters are set to the following (/etc/system). I'm not an Oracle guy so I'm not sure where to start looking but any informaiton is greatly appreciated. Thanks in advance. There are two databases running on this server, one is a production database and the other is a pre-production database. [root@bandb /]# cat /etc/system | grep seminfo set semsys:seminfo_semmni=100 set semsys:seminfo_semmns=2048 set semsys:seminfo_semmsl=400 set semsys:seminfo_semopm=100 set semsys:seminfo_semvmx=32767 [root@bandb /]# cat /etc/system | grep shminfo set shmsys:shminfo_shmmax=4294967295 set shmsys:shminfo_shmmin=1 set shmsys:shminfo_shmmni=100 set shmsys:shminfo_shmseg=10 [root@bandb /]#

    Read the article

  • All Webcams (integrated or otherwise) have stopped working

    - by cgoddard
    Recently, like in the last few months (incidentally, I didn't notice it at first, but I think it might have coincided with the installation of libusb) all webcams have stopped working on my laptop. But, its not a driver error or anything like that, the webcam claims it is working, but when I try to use it in skype, it tells me that it thinks another program is using my webcam. However, I have tried going through every program and closing it until system crash, but it never becomes available. But the light on the side of the inbuilt webcam doesn't come on. And when I added a second webcam, it became available to the system, installed fine, return error 0 on the devices manager, and when I tried to use it, claimed it was in use. How can I find out what might have gone wrong to be causing the system to think that the webcams are constantly in use?

    Read the article

  • Fastest Memory (within reason) for a MotherBoard [on hold]

    - by sampson
    I was wondering if it would be OK to use DDR3 3000 memory with Asus Maximus VI Impact MotherBoard, Intel® Core™ i3-4130T Processor and Steamcom's FC8 case The purpose of this machine is for a HTPC (Home Theater Personal Computer) system, only, no gaming. The case is fan less as is the CPU cooling system. Also, would it be worth it, heat wise, to go past the 1600 memory type? I mean, would DDR 3000 make the box that much faster to make it worthwhile? The Processor has a TDP rating of 35 W. The memory specifications for the processor are: Memory Specifications Max Memory Size (dependent on memory type) 32 GB Memory Types DDR3-1333/1600 # of Memory Channels 2 Max Memory Bandwidth 25.6 GB/s ECC Memory Supported ‡ Yes The FC8 case's heat displacement system is rated at 95 W TDP

    Read the article

  • starting command automaticaly [closed]

    - by aaa
    playing with Debian on raspberry pi. I have a 3g dongle modem on the system and there is a software called sakis3g to connect to internet. I want system to connect to internet automatically every time it starts. It takes about 30-40 seconds to get connected. copied sakis3g to /sbin folder. This command has to be run as root: sakis3g connect parameters blah blah blah I tried to put it in the /etc/rc.local and rebooted system, but no luck. I tried to put it in the crontab as: @reboot sakis3g connect parameters blah blah blah What am I missing here?

    Read the article

  • How do I mount a "DiskSecure Multiboot" partition?

    - by ????
    For a hard drive that has 4 or 5 partitions, I was able to mount one of them using Ubuntu LiveCD: sudo mount /dev/sda1 /mnt but is there a way to mount to the other partitions? (if using sudo fdisk -l, it only shows /dev/sda) GParted's snapshot is: Right now, the fdisk info is as follows: ubuntu@ubuntu:~$ sudo fdisk -l /dev/sda Disk /dev/sda: 320.1 GB, 320072933376 bytes 255 heads, 63 sectors/track, 38913 cylinders, total 625142448 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x1aca8ea5 Device Boot Start End Blocks Id System /dev/sda1 284993226 350602558 32804666+ 7 HPFS/NTFS/exFAT and then ubuntu@ubuntu:/mnt$ sudo fdisk -l /dev/sda1 Disk /dev/sda1: 33.6 GB, 33591978496 bytes 255 heads, 63 sectors/track, 4083 cylinders, total 65609333 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x2052474d This doesn't look like a partition table Probably you selected the wrong device. Device Boot Start End Blocks Id System /dev/sda1p1 ? 6579571 1924427647 958924038+ 70 DiskSecure Multi-Boot /dev/sda1p2 ? 1953251627 3771827541 909287957+ 43 Unknown /dev/sda1p3 ? 225735265 225735274 5 72 Unknown /dev/sda1p4 2642411520 2642463409 25945 0 Empty Partition table entries are not in disk order Per @lgarzo's request, parted info is: ubuntu@ubuntu:/mnt$ sudo parted /dev/sda print Model: ATA ST3320820AS (scsi) Disk /dev/sda: 320GB Sector size (logical/physical): 512B/512B Partition Table: msdos Number Start End Size Type File system Flags 1 146GB 180GB 33.6GB primary ntfs boot The command sudo mount /dev/sda1p2 /mnt won't work.

    Read the article

  • Ubuntu 12.04LTS mountall: Disconnected from Plymouth

    - by user169954
    I have ubuntu 12.04LTS 64bit running on an i5 dual core 8G RAM. On startup I get the message mountall: Disconnected from Plymouth [OK] And the system looks stuck. However, if I go to tty1, then I can login and startx and everything seems to be fine except for being a bit sluggish. I can verify that my nfs mounts are ok, and that my swap is ok. Every time I reboot the system there is a _gdm_gdm_crash file in my /var/crash, which makes me think my problem is rooted in gdm, X configs and/or nvidia drivers. A bit of background in case it's relevant: 3 hours ago my desktop crashed. Following various 'tips' on the web I made a complete mess of my X server and X configuration files, and at one point I even had to recreate my swap partition. Anyway, after much struggle I managed to get to the state I mentioned above: I have a working system provided I always login through tty1. What is this Plymouth anyway? Would it make a difference if I used gnome-wm instead of gdm or lightdm? (I mean to the startup, not to me :-) What bit of config do I change to tell startx to use gnome-wm not gdm or ligthdm? Thank you in advance

    Read the article

  • Parallelism in .NET – Part 4, Imperative Data Parallelism: Aggregation

    - by Reed
    In the article on simple data parallelism, I described how to perform an operation on an entire collection of elements in parallel.  Often, this is not adequate, as the parallel operation is going to be performing some form of aggregation. Simple examples of this might include taking the sum of the results of processing a function on each element in the collection, or finding the minimum of the collection given some criteria.  This can be done using the techniques described in simple data parallelism, however, special care needs to be taken into account to synchronize the shared data appropriately.  The Task Parallel Library has tools to assist in this synchronization. The main issue with aggregation when parallelizing a routine is that you need to handle synchronization of data.  Since multiple threads will need to write to a shared portion of data.  Suppose, for example, that we wanted to parallelize a simple loop that looked for the minimum value within a dataset: double min = double.MaxValue; foreach(var item in collection) { double value = item.PerformComputation(); min = System.Math.Min(min, value); } .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } This seems like a good candidate for parallelization, but there is a problem here.  If we just wrap this into a call to Parallel.ForEach, we’ll introduce a critical race condition, and get the wrong answer.  Let’s look at what happens here: // Buggy code! Do not use! double min = double.MaxValue; Parallel.ForEach(collection, item => { double value = item.PerformComputation(); min = System.Math.Min(min, value); }); This code has a fatal flaw: min will be checked, then set, by multiple threads simultaneously.  Two threads may perform the check at the same time, and set the wrong value for min.  Say we get a value of 1 in thread 1, and a value of 2 in thread 2, and these two elements are the first two to run.  If both hit the min check line at the same time, both will determine that min should change, to 1 and 2 respectively.  If element 1 happens to set the variable first, then element 2 sets the min variable, we’ll detect a min value of 2 instead of 1.  This can lead to wrong answers. Unfortunately, fixing this, with the Parallel.ForEach call we’re using, would require adding locking.  We would need to rewrite this like: // Safe, but slow double min = double.MaxValue; // Make a "lock" object object syncObject = new object(); Parallel.ForEach(collection, item => { double value = item.PerformComputation(); lock(syncObject) min = System.Math.Min(min, value); }); This will potentially add a huge amount of overhead to our calculation.  Since we can potentially block while waiting on the lock for every single iteration, we will most likely slow this down to where it is actually quite a bit slower than our serial implementation.  The problem is the lock statement – any time you use lock(object), you’re almost assuring reduced performance in a parallel situation.  This leads to two observations I’ll make: When parallelizing a routine, try to avoid locks. That being said: Always add any and all required synchronization to avoid race conditions. These two observations tend to be opposing forces – we often need to synchronize our algorithms, but we also want to avoid the synchronization when possible.  Looking at our routine, there is no way to directly avoid this lock, since each element is potentially being run on a separate thread, and this lock is necessary in order for our routine to function correctly every time. However, this isn’t the only way to design this routine to implement this algorithm.  Realize that, although our collection may have thousands or even millions of elements, we have a limited number of Processing Elements (PE).  Processing Element is the standard term for a hardware element which can process and execute instructions.  This typically is a core in your processor, but many modern systems have multiple hardware execution threads per core.  The Task Parallel Library will not execute the work for each item in the collection as a separate work item. Instead, when Parallel.ForEach executes, it will partition the collection into larger “chunks” which get processed on different threads via the ThreadPool.  This helps reduce the threading overhead, and help the overall speed.  In general, the Parallel class will only use one thread per PE in the system. Given the fact that there are typically fewer threads than work items, we can rethink our algorithm design.  We can parallelize our algorithm more effectively by approaching it differently.  Because the basic aggregation we are doing here (Min) is communitive, we do not need to perform this in a given order.  We knew this to be true already – otherwise, we wouldn’t have been able to parallelize this routine in the first place.  With this in mind, we can treat each thread’s work independently, allowing each thread to serially process many elements with no locking, then, after all the threads are complete, “merge” together the results. This can be accomplished via a different set of overloads in the Parallel class: Parallel.ForEach<TSource,TLocal>.  The idea behind these overloads is to allow each thread to begin by initializing some local state (TLocal).  The thread will then process an entire set of items in the source collection, providing that state to the delegate which processes an individual item.  Finally, at the end, a separate delegate is run which allows you to handle merging that local state into your final results. To rewriting our routine using Parallel.ForEach<TSource,TLocal>, we need to provide three delegates instead of one.  The most basic version of this function is declared as: public static ParallelLoopResult ForEach<TSource, TLocal>( IEnumerable<TSource> source, Func<TLocal> localInit, Func<TSource, ParallelLoopState, TLocal, TLocal> body, Action<TLocal> localFinally ) The first delegate (the localInit argument) is defined as Func<TLocal>.  This delegate initializes our local state.  It should return some object we can use to track the results of a single thread’s operations. The second delegate (the body argument) is where our main processing occurs, although now, instead of being an Action<T>, we actually provide a Func<TSource, ParallelLoopState, TLocal, TLocal> delegate.  This delegate will receive three arguments: our original element from the collection (TSource), a ParallelLoopState which we can use for early termination, and the instance of our local state we created (TLocal).  It should do whatever processing you wish to occur per element, then return the value of the local state after processing is completed. The third delegate (the localFinally argument) is defined as Action<TLocal>.  This delegate is passed our local state after it’s been processed by all of the elements this thread will handle.  This is where you can merge your final results together.  This may require synchronization, but now, instead of synchronizing once per element (potentially millions of times), you’ll only have to synchronize once per thread, which is an ideal situation. Now that I’ve explained how this works, lets look at the code: // Safe, and fast! double min = double.MaxValue; // Make a "lock" object object syncObject = new object(); Parallel.ForEach( collection, // First, we provide a local state initialization delegate. () => double.MaxValue, // Next, we supply the body, which takes the original item, loop state, // and local state, and returns a new local state (item, loopState, localState) => { double value = item.PerformComputation(); return System.Math.Min(localState, value); }, // Finally, we provide an Action<TLocal>, to "merge" results together localState => { // This requires locking, but it's only once per used thread lock(syncObj) min = System.Math.Min(min, localState); } ); Although this is a bit more complicated than the previous version, it is now both thread-safe, and has minimal locking.  This same approach can be used by Parallel.For, although now, it’s Parallel.For<TLocal>.  When working with Parallel.For<TLocal>, you use the same triplet of delegates, with the same purpose and results. Also, many times, you can completely avoid locking by using a method of the Interlocked class to perform the final aggregation in an atomic operation.  The MSDN example demonstrating this same technique using Parallel.For uses the Interlocked class instead of a lock, since they are doing a sum operation on a long variable, which is possible via Interlocked.Add. By taking advantage of local state, we can use the Parallel class methods to parallelize algorithms such as aggregation, which, at first, may seem like poor candidates for parallelization.  Doing so requires careful consideration, and often requires a slight redesign of the algorithm, but the performance gains can be significant if handled in a way to avoid excessive synchronization.

    Read the article

< Previous Page | 419 420 421 422 423 424 425 426 427 428 429 430  | Next Page >